Cумма цифр на километровых столбах

Задача: На каждом километре шоссе между селами Петино и Васино стоит столб с табличкой, на одной стороне которой написано, сколько километров до Петино, а на другой – до Васино. Тимофей заметил, что на каждом столбе сумма всех цифр равна N. Найдите расстояние от Петино до Васино.

Алгоритм принимает на вход 1 число - сумму цифр на километровых столбах (N).
На выход алгоритм должен отдавать 1 число - расстояние между Петино и Васино.
num = int(input())
def g(x):
    y = []
    for i in range(x+1):
        n = x - i
        y.append(sum([int(j) for j in str(i)]) + sum([int(j) for j in str(n)]))
    
    if min(y) == max(y) and min(y) == num:
        return x
    return 0

for i in range(2021): # но тут максимально 2021 километр
    if g(i): print(i); break
    else: g(i)

Как еще можно написать программу чтобы число итераций было больше 2021


Ответы (1 шт):

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

Если чуть-чуть покумекать, то можно заметить, какие именно расстояния могут давать одинаковые суммы цифр, увидеть закономерности, и получить простую функцию:

def dist(x):
     return (x % 9 + 1) * (10**(x // 9)) - 1
→ Ссылка