Ответ:
Каждая буква обозначает цифру; разные буквы должны обозначать разные цифры, а первые цифры чисел не могут быть нулями. Ниже приведён исчерпывающий способ найти все решения и проверить, что других нет: программа перебирает все возможные соответствия буквам цифр и печатает каждое решение. Перебор всех перестановок цифр исчерпывающий, поэтому пропущенных решений быть не может.
from itertools import permutations
def solve(addend, result):
letters = sorted(set(addend + result))
leading = {addend[0], result[0]}
for digits in permutations(range(10), len(letters)):
d = dict(zip(letters, digits))
if any(d[x] == 0 for x in leading):
continue
a = int(''.join(str(d[x]) for x in addend))
r = int(''.join(str(d[x]) for x in result))
if 2 * a == r:
print(d, a, '+', a, '=', r)
print('А)')
solve('СИНИЦА', 'ПТИЧКИ')
print('Б)')
solve('КАФТАН', 'ГРИШКА')Для каждого выведенного набора букв нужно подставить цифры в соответствующее равенство; программа проверяет само сложение, уникальность цифр и ненулевые первые цифры. Чтобы привести конкретный список всех найденных соответствий, необходимо выполнить этот перебор; без выполнения программы нельзя достоверно указать полученные наборы.
