Утраченный символ
Стёпа очень любит многоуровневые компьютерные игры. Особенно ему нравятся те игры, в которых в любой момент можно узнать, на каком по счету уровне он сейчас находится и сколько всего уровней имеется в этой игре. Обычно где-нибудь в углу экрана находится надпись, например «10/100», которая означает, что сейчас Стёпа находится на 10 уровне, а всего в игре 100 уровней. На днях Стёпа установил на свой компьютер новую игру, но оказалось, что разработчик для вывода на экран надписи с номерами уровней использовал шрифт, которого нет на Стёпином компьютере. Шрифт автоматически заменился на какой-то другой, в котором не поддерживается символ «/». Теперь два числа, которые должны были быть разделены, слились в одно, и Стёпу это невероятно расстраивает. Он подумал о том, что можно попробовать самому угадывать место, в котором должен стоять символ «/», но потом понял, что в некоторых случаях подходящих вариантов может быть несколько. Например, если на экране написано «1234», это может означать как то, что он находится на 1 уровне из 234, так и то, что он находится на 12 уровне из 34. Ему стало интересно, а сколько всего существует способов подставить символ «/» в надпись на экране так, чтобы надпись была корректной, то есть чтобы слева и справа от символа были корректные числа без лидирующих нулей и при этом левое число не превосходило правое. Помогите Стёпе ответить на этот вопрос. Решить на Python.
n = int(input())
s=0
while n>0:
s += 1
n //= 10
print(s//2)
Ответы (1 шт):
Так, например:
def find_first_positive(num:str):
''' Ищет индекс первого положительного числа в строке num.'''
return min(filter(lambda x: x != -1, [num.find(str(i)) for i in range(1, 10)]))
n = input()
pairs = []
for i in range(1, len(n)//2+1):
first = n[:i]
second = n[i:]
zero_pos = second.find('0')
if (zero_pos == -1) or (find_first_positive(second) < zero_pos):
if int(first) <= int(second):
pairs.append([first, second])
print(pairs)