このディレクトリの索引

覆面算(kadokawa+dwango+kada=kandouii,N1+N2+N3=N4,_文字と数字の対応) :-
        覆面(kadokawa+dwango+kada=kandouii,L0_1,L0_2,L0_3,L1,L2,L3,L4),
        覆面算(L0_3,L0_2),
        覆面算計算(L1,L2,L3,L4,N1,N2,N3,N4),
        文字と数字の対応(L0_1,L0_2,_文字と数字の対応).

覆面(A_1+A_2+A_3=A_4,L0_1,L0_2,L0_3,L1,L2,L3,L4) :-
        文字出現順の決定([A_1,A_2,A_3,A_4],L0_1),
        findall(N,between(1,9,_),L0_2),
        L0_3 = ['1','2','3','4','5','6','7','8','9','0'],
        覆面文字と変数の対応付け(L0_1,L0_2,A_1,A_2,A_3,A_4,L1,L2,L3,L4).

文字出現順の決定(L,L0_1) :-
        atomic_list_concat(L,A),
        atom_chars(A,Chars),
        唯一の文字ならびを得る(Chars,L0_1).

要素に重複のない文字ならび(_文字ならび,_要素に重複のない文字ならび) :-
        findall(_文字,(
                    append(L1,[_文字|_],_文字ならび),
                    \+(member(_文字,L1))),
                _要素に重複のない文字ならび).

数式の対応付け(L0_1,L0_2,A_1,A_2,A_3,A_4,L1,L2,L3,L4) :-
        数式の対応付け(L0_1,L0_2,A_1,L1),
        数式の対応付け(L0_1,L0_2,A_2,L2),
        数式の対応付け(L0_1,L0_2,A_3,L3),
        数式の対応付け(L0_1,L0_2,A_4,L4).

覆面文字と変数の対応付け(L0_1,L0_2,_覆面文字列,_変数ならび) :-
        atom_chars(_覆面文字列,_覆面文字ならび),
        findall(V,(
                    nth1(_nth1,_覆面文字ならび,_文字),
                    nth1(_nth1,L0_1,_文字),
                    nth1(_nth1,L0_2,V)),
                _変数ならび).

覆面算計算(L1,L2,L3,L4,N1,N2,N3,N4) :-
        number_chars(N1,L1),
        number_chars(N2,L2),
        number_chars(N3,L3),
        number_chars(N4,L4),
        N1 + N2 + N3 =:= N4.

覆面算(_,[]).
覆面算(L,[A|R2]) :-
        select(A,L,R),
        覆面算(R,R2).

文字と数字の対応(L0_1,L0_2,_文字と数字の対応) :-
        findall(A=B,(
                    nth1(_nth1,L0_1,A),
                    nth1(_nth1,L0_2,B)),
                _文字と数字の対応).

唯一の文字ならびを得る([],[]).
唯一の文字ならびを得る([A|R1],[A|R2]) :-
        \+(member(A,R1)),
        唯一の文字ならびを得る(R1,R2).
唯一の文字ならびを得る([A|R1],R2) :-
        member(A,R1),
        唯一の文字ならびを得る(R1,R2).