Утраченный символ

Стёпа очень любит многоуровневые компьютерные игры. Особенно ему нравятся те игры, в которых в любой момент можно узнать, на каком по счету уровне он сейчас находится и сколько всего уровней имеется в этой игре. Обычно где-нибудь в углу экрана находится надпись, например «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 шт):

Автор решения: n1tr0xs

Так, например:

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)
→ Ссылка