Advertisement
575

Olymp Task: Palindrom number

575
Oct 5th, 2016
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.10 KB | None | 0 0
  1. '''
  2. Корректно работает только для count < 18000
  3. После 18000 программа работает дольше секунды
  4. Нужно разобраться, почему не работает пропуск начальных значений:
  5. if count > 18000:
  6.    counter = 18000
  7.    current_number = 8001008
  8. '''
  9.  
  10. #from time import time
  11.  
  12. count = int(input())
  13. #start = time()
  14. counter = 9
  15. current_number = 11
  16.  
  17.  
  18. def IsPalindrom(number):
  19.     number1 = list(str(number))
  20.     number2 = list(str(number))
  21.     number2.reverse()
  22.     if number1 == number2:
  23.         return True
  24.     else:
  25.         return False         #IF NUMBER IS PALINDROM RETURNS TRUE
  26.  
  27. def NotPalindrom(number):
  28.     number1 = list(str(number))
  29.     number2 = list(str(number))
  30.     number2.reverse()
  31.     if number1 != number2:
  32.         return True
  33.     else:
  34.         return False        #IF NUMBER IS NOT PALINDROM RETURNS TRUE
  35.    
  36.  
  37. def NextNumber(current_number):
  38.     if current_number < 90:
  39.         next_number = current_number + 11
  40.         return next_number
  41.     elif current_number == 99:
  42.         return 101
  43.     elif current_number < 999:
  44.         next_number = current_number + 10
  45.         while NotPalindrom(next_number):
  46.             next_number += 1
  47.         return next_number
  48.     elif current_number == 999:
  49.         return 1001
  50.     elif current_number < 9999:
  51.         if IsPalindrom(current_number + 110):
  52.             return current_number + 110
  53.         else:
  54.             return current_number + 11
  55.     elif current_number == 9999:
  56.         return 10001
  57.     elif current_number < 99999:
  58.         current_number1 = list(str(current_number))
  59.         current_number_list = []
  60.         for element in current_number1:
  61.             current_number_list.append(int(element))
  62.         if current_number_list[2] + 1 < 10:
  63.             return current_number_list[0] * 10000 + current_number_list[1] * 1000 + (current_number_list[2] + 1) * 100 + current_number_list[3] * 10 + current_number_list[4]
  64.         else:
  65.             if current_number_list[1] + 1 < 10:
  66.                 return current_number_list[0] * 10000 + (current_number_list[1] + 1) * 1000 + (current_number_list[3] + 1) * 10 + current_number_list[4]
  67.             else:
  68.                 return (current_number_list[0] + 1) * 10000 + (current_number_list[4] + 1)
  69.     elif current_number == 99999:
  70.         return 100001
  71.     elif current_number < 999999:
  72.         current_number1 = list(str(current_number))
  73.         current_number_list = []
  74.         for element in current_number1:
  75.             current_number_list.append(int(element))
  76.         if  current_number_list[2] + 1 < 10:
  77.             return current_number_list[0] * 100000 + current_number_list[1] * 10000 + (current_number_list[2] + 1) * 1000 + (current_number_list[3] + 1) * 100 + current_number_list[4] * 10 + current_number_list[5]
  78.         else:
  79.             if current_number_list[1] + 1 < 10:
  80.                 return current_number_list[0] * 100000 + (current_number_list[1] + 1) * 10000 + (current_number_list[4] + 1) * 10 + current_number_list[5]
  81.             else:
  82.                 return (current_number_list[0] + 1) * 100000 + (current_number_list[5] + 1)
  83.     elif current_number == 999999:
  84.         return 1000001
  85.     elif current_number < 9999999:
  86.         current_number1 = list(str(current_number))
  87.         current_number_list = []
  88.         for element in current_number1:
  89.             current_number_list.append(int(element))
  90.         if  current_number_list[3] + 1 < 10:
  91.             return current_number_list[0] * 1000000 + current_number_list[1] * 100000 + current_number_list[2] * 10000 + (current_number_list[3] + 1) * 1000 + current_number_list[4] * 100 + current_number_list[5] * 10 + current_number_list[6]
  92.         else:
  93.             if current_number_list[2] + 1 < 10:
  94.                 return current_number_list[0] * 1000000 + current_number_list[1] * 100000 + (current_number_list[2] + 1) * 10000 + (current_number_list[4] + 1) * 100 +  current_number_list[5] * 10 + current_number_list[6]
  95.             else:
  96.                 if current_number_list[1] + 1 < 10:
  97.                     return current_number_list[0] * 1000000 + (current_number_list[1] + 1) * 100000 + (current_number_list[5] + 1) * 10 + current_number_list[6]
  98.                 else:
  99.                     return (current_number_list[0] + 1) * 1000000 + (current_number_list[6] + 1)
  100.     elif current_number == 9999999:
  101.         return 10000001
  102.     elif current_number < 99999999:
  103.         current_number1 = list(str(current_number))
  104.         current_number_list = []
  105.         for element in current_number1:
  106.             current_number_list.append(int(element))
  107.         if current_number_list[3] + 1 < 10:
  108.             return current_number_list[0] * 10000000 + current_number_list[1] * 1000000 + current_number_list[2] * 100000 + (current_number_list[3] + 1) * 10000 + (current_number_list[4] + 1) * 1000 + current_number_list[5] * 100 + current_number_list[6] * 10 + current_number_list[7]
  109.         else:
  110.             if current_number_list[2] + 1 < 10:
  111.                 return current_number_list[0] * 1000000 + current_number_list[1] * 100000 + (current_number_list[2] + 1) * 10000 + (current_number_list[5] + 1) * 100 +  current_number_list[6] * 10 + current_number_list[7]
  112.             else:
  113.                 if current_number_list[1] + 1 < 10:
  114.                     return current_number_list[0] * 1000000 + (current_number_list[1] + 1) * 100000 + (current_number_list[6] + 1) * 10 + current_number_list[7]
  115.                 else:
  116.                     return (current_number_list[0] + 1) * 1000000 + (current_number_list[7] + 1)
  117.            
  118.  
  119.  
  120. if count < 10:
  121.     if count == 1:
  122.         print(1)
  123.     if count == 2:
  124.         print(2)
  125.     if count == 3:
  126.         print(3)
  127.     if count == 4:
  128.         print(4)
  129.     if count == 5:
  130.         print(5)
  131.     if count == 6:
  132.         print(6)
  133.     if count == 7:
  134.         print(7)
  135.     if count == 8:
  136.         print(8)
  137.     if count == 9:
  138.         print(9)
  139.  
  140. else:
  141.     while count - 1 != counter:
  142.         counter += 1
  143.         current_number = NextNumber(current_number)
  144.  
  145.     print(current_number)
  146.  
  147. #print(time() - start)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement