Различия между версиями 2 и 3
Версия 2 от 2023-01-07 11:01:51
Размер: 1521
Редактор: FrBrGeorge
Комментарий:
Версия 3 от 2023-01-10 15:34:57
Размер: 2541
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 24: Строка 24:

Спойлер:
{{{#!wiki comment
Я решал задачу рекурсивно по `n`. Для каждого `n` делал предположение относительно соответствия `n`-й буквы одной из оставшихся оставшимся цифр (если буква уже встречалась, значит, в данном месте выбора нет). Затем складывал числовые «хвосты» слагаемых и проверял совпадение с числовым «хвостом» суммы (с точностью до ''предыдущей цифры''). Если совпадения нет, предположение неверно, если есть, можно разбирать случай для `n+1` и оставшихся цифр.
|| || Ч,,11,, || И,,9,, || С,,6,, || Л,,3,, || О,,0,, ||
|| + || || || Е,,7,, || Щ,,4,, || Е,,1,, ||
|| ||С,,12,, || У,,10,, || М,,8,, || М,,5,, || А,,2,, ||
}}}

Требуется расшифровать запись сложения двух чисел, в котором цифры заменены буквами, причем разные цифры заменены разными буквами, одинаковые - одинаковыми. Предполагается, что исходное равенство верно и записано по обычным правилам арифметики. В частности, в записи числа первая слева цифра не является цифрой 0; используется десятичная система счисления. Ввести ребус в формате ЧИСЛО+ЕЩЕ=СУММА, вывести в столбик все решения в строковом лексикографическом порядке.

ЧИСЛО+ЕЩЕ=СУММА

29348+767=30115
29368+747=30115
59638+474=60112
59678+434=60112
69714+838=70552
69734+818=70552

Сначала я, конечно, написал решение «в лоб», которое (после ввода и подготовки данных) начиналось строкой

   1 for кодировка in permutations("0123456789", len(алфавит)):
   2 

Этого достаточно, чтобы любой пример решался менее, чем за минуту, но наши лимиты намного жёстче.

Спойлер:

LecturesCMC/PythonIntro2022/Homework_ArithRebus (последним исправлял пользователь FrBrGeorge 2023-01-10 15:34:57)