zhukov000

bank cards

Nov 2nd, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.08 KB | None | 0 0
  1. digits = [int(x) for x in input()]
  2. n = len(digits)
  3.  
  4. # search bound of intervals - all digit exist in interval
  5. intervals = [ n ]
  6. digit_exists = [ False ] * 10
  7. digit_counts = 0
  8.  
  9. for i in range(n-1, -1, -1):
  10.   if not digit_exists[ digits[i] ]:
  11.     digit_exists[ digits[i] ] = True
  12.     digit_counts += 1
  13.  
  14.     if digit_counts == 10:
  15.       intervals.append(i)
  16.       digit_exists = [ False ] * 10
  17.       digit_counts = 0
  18.  
  19. # search the answer
  20. answer = []
  21. m = len(intervals)
  22. left = 0
  23.  
  24. for i in range(m-1, -1, -1):
  25.   digit_exists = [ False ] * 10
  26.   for j in range(left, intervals[i]):
  27.     digit_exists[ digits[j] ] = True
  28.  
  29.   if left > 0 and not digit_exists[0]:
  30.     mn_digit = 0
  31.   else:
  32.     mn_digit = 1
  33.     while mn_digit < 10 and digit_exists[ mn_digit ]:
  34.       mn_digit += 1
  35.  
  36.   if mn_digit == 10:
  37.     answer.append(10)
  38.     left = intervals[i-1] # !!! skip next interval
  39.   else:
  40.     answer.append(mn_digit)
  41.     if i > 0:
  42.       for j in range(intervals[i], intervals[i-1]):
  43.         if digits[j] == mn_digit:
  44.           left = j + 1
  45.           break
  46.  
  47. print(*answer, sep='')
Add Comment
Please, Sign In to add comment