Тип 25 № 59730 
Обработка целочисленной информации. Маска числа
i
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность — цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 3?1*57, делящиеся на 2023 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на 2023.
Количество строк в таблице для ответа избыточно.
Решение. Будем последовательно рассматривать каждое целое число, кратное 2023, затем каждое число проверять на соответствие маске.
Приведём решение на языке Python.
from fnmatch import *
for x in range(0, 10**8, 2023):
# Перебираем все числа от 0 с шагом 2023, будут получены числа кратные 2023
if fnmatch(str(x), '3?1*57'):
# Проверяем полученное число соответствию заданию
print(x, x // 2023)
В результате работы программа должна вывести следующее:
321657 159
34105757 16859
35117257 17359
36128757 17859
37140257 18359
38151757 18859
39163257 19359
Ответ: 321657&159&34105757&16859&35117257&17359&36128757&17859&37140257&18359&38151757&18859&39163257&19359
59730
321657 159 34105757 16859 35117257 17359 36128757 17859 37140257 18359 38151757 18859 39163257 19359