In [ ]:
#credit: https://github.com/sarupbanskota/SPOJ/blob/master/PALIN.py
In [1]:
def inc(left):
leftlist=list(left)
last = len(left)-1
while leftlist[last]=='9':
leftlist[last]='0'
last-=1
leftlist[last] = str(int(leftlist[last])+1)
return "".join(leftlist)
In [2]:
def next_smallest_palindrome(number):
size=len(number)
odd=size%2
if odd:
center=number[size/2]
else:
center=''
left=number[:size/2]
right = left[::-1]
pdrome = left + center + right
if pdrome > number:
print pdrome
else:
if center:
if center<'9':
center = str(int(center)+1)
print left + center + right
return
else:
center = '0'
if left == len(left)*'9':
print '1' + (len(number)-1)*'0' + '1'
else:
left = inc(left)
print left + center + left[::-1]
In [3]:
print next_smallest_palindrome("24")
print next_smallest_palindrome("9")
print next_smallest_palindrome("0000000")
print next_smallest_palindrome("999999")
print next_smallest_palindrome("2456")
print next_smallest_palindrome("2998")
print next_smallest_palindrome("259977")
In [ ]: