Общая криптарифметическая головоломка, заданная на моем экзамене

 ONE +
 ONE +
 TWO =
______
FOUR

Может кто-нибудь может решить эту криптарифметику в пошаговом процессе Спасибо

1 ответ

Пролог может это сделать! (в конце концов это Stackru, и вы отметили свой вопрос искусственным интеллектом)

solution(O, N, E, T, W, F, U, R) :-
    /* All different */
    select(O, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], L1),
    select(N, L1, L2),
    select(E, L2, L3),
    select(T, L3, L4),
    select(W, L4, L5),
    select(F, L5, L6),
    select(U, L6, L7),
    member(R, L7),

    /* Constraints */
    FOUR is F * 1000 + O * 100 + U * 10 + R,
    ONE is O * 100 + N * 10 + E,
    TWO is T * 100 + W * 10 + O,

    FOUR is ONE + ONE + TWO.

Общая идея состоит в том, чтобы сначала выбрать все переменные, а затем проверить условия головоломки.

Сейчас

?- solution(O,N,E,T,W,F,U,R).

напечатает первое найденное решение. С:

?- aggregate_all(count, (solution(O,N,E,T,W,F,U,R)), Count).

Вы можете видеть, что есть 173 отличные решения.

Отслеживание выполнения запроса позволяет вам последовательно увидеть все цели, которые выполняются как часть запроса, а также определить, успешно ли они выполнены (это также позволяет увидеть, какие шаги выполняются в виде возвратов Prolog):

?- trace, solution(O,N,E,T,W,F,U,R).

(вы можете использовать онлайн- платформу SWI-Prolog, чтобы поиграть с примером).


Традиционно (в словесной арифметике):

каждая буква должна представлять отдельную цифру, и (как в обычной арифметической записи) начальная цифра многозначного числа не должна быть равна нулю. У хорошей головоломки должно быть уникальное решение, а буквы должны составлять фразу.

Вы можете принудительно ввести "начальная цифра не должна быть нулевой", добавив:

not(O = 0), not(T = 0), not(F = 0).

в любом случае проблема имеет несколько решений.

Другие вопросы по тегам