このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1276873238/829
#  問題 
#  数独の解答が9行9列の文字列で与えられたとき正しいかどうか判定せよ。 
# 
# 

'数独の解答が9行9列の文字列で与えられたとき正しいかどうか'(_文字列) :-
        '数独の解答が9行9列の文字列で与えられたとき'(_文字列,LL),
        数独の回答が正しい(LL).

'数独の解答が9行9列の文字列で与えられたとき'(_9行9列の文字列,LL) :-
        split(9行9列の文字列,['\n'],_行ならび),
        '9行9列の行ならびを行列に変換'(_行ならび,LL).

'9行9列の行ならびを行列に変換'([],[]).
'9行9列の行ならびを行列に変換'([_行|R1],[L|R2]) :-
        findall(N,(
                    sub_atom(_行,_,1,_,A),
                    atom_number(A,N)),
                L),
        '9行9列の行ならびを行列に変換'(R1,R2).

数独の回答が正しい(LL) :-
        '行・列要素の数独の解答は正しい'(LL),
        矩形要素の数独の解答も正しい(LL).

'行・列要素の数独の解答は正しい'(LL) :-
        行要素の数独診断(LL),
        転置(LL,LL2),
        行要素の数独診断(LL2).

行要素の数独診断([]).
行要素の数独診断([L1|R]) :-
        一意の数が9個(L1),
        行要素の数独診断(R).

矩形要素の数独の解答も正しい([]).
矩形要素の数独の解答も正しい([L1,L2,L3|R1],L) :-
        転置([L1,L2,L3],LL1),
        矩形要素診断(LL1),
        矩形要素の数独の解答も正しい(R1,R2).
                
矩形要素診断([]).
矩形要素診断([L1,L2,L3|R]) :-
        append(L1,L2,L3,L),
        一意の数が9個(L),
        矩形要素診断(R).

一意の数が9個(L1) :-
        sort(L1,L2),
        length(L2,9).