import os import sys def get_palendrome(val): return int(str(val)[::-1]) def is_palendrome(val): return val == get_palendrome(val) def main(): from time import sleep # num -> (is_pal, was_run) START = 0 NUMBER_OF_VALUES = 10000 PALIN = dict((x,(False,False)) for x in xrange(START,NUMBER_OF_VALUES)) for x in xrange(START,NUMBER_OF_VALUES): # If it was run already, don't do it again if PALIN[x][1] and PALIN[x][0]: continue numbers = [x] num_runs = 0 while not PALIN[numbers[-1]][0]: if num_runs >= 50: val = numbers.pop(0) PALIN[val] = (False,True) num_runs =- 1 if len(numbers) == 0: break if numbers[0] >= NUMBER_OF_VALUES: for n in numbers: PALIN[n] = (False,True) break num_runs += 1 num1 = numbers[-1] num2 = get_palendrome(num1) if len(str(num2)) == len(str(num1)): numbers.append(num2) PALIN[num2] = (False,True) result = num1 + num2 if is_palendrome(result): for n in numbers: PALIN[n] = (True,True) else: numbers.append(result) PALIN[result]= (False,True) l_nums = [val for val,(x,y) in PALIN.items() if not x and val < NUMBER_OF_VALUES] print len(l_nums) if __name__ == "__main__": sys.exit(main())