PROLOG中的填字游戏解算器

Joh*_*imm 6 prolog crossword

天堂岛的克里奥尔语有14个字:"放弃","鲍鱼","anagram","船","船夫","孩子","连接","优雅","增强","岛屿",男人","沙子","太阳"和"女人".

天堂时报发布了这个填字游戏:

天堂时代填字游戏

填字游戏包含14个单词中的一些但没有其他单词.

写一个从...开始的Prolog程序

word(X) :-
member(X,
[
[a,b,a,n,d,o,n], [a,b,a,l,o,n,e], [a,n,a,g,r,a,m],
[b,o,a,t], [b,o,a,t,m,a,n], [c,h,i,l,d],
[c,o,n,n,e,c,t], [e,l,e,g,a,n,t], [e,n,h,a,n,c,e],
[i,s,l,a,n,d], [m, a, n], [s,a,n,d],
[s,u,n], [w, o, m, a, n]
]).

solution(H1,H2,H3,V1,V2,V3) :-
Run Code Online (Sandbox Code Playgroud)

solution以这样的方式定义谓词

solution(H1,H2,H3,V1,V2,V3)
Run Code Online (Sandbox Code Playgroud)

是真,当且仅当H1,H2,H3,V1,V2,和V3是当写到上面给出的电网形成一个有效的填字游戏天堂岛的有效字.(例如,第二个字母H1应与第二个字母重合V1.)

使用查询

?- solution(H1,H2,H3,V1,V2,V3).
Run Code Online (Sandbox Code Playgroud)

解决填字游戏.找到填字游戏的所有解决方案.

提示:您可能希望从较小的填字游戏和不太丰富的词汇开始.

joe*_*l76 9

只要看一下图片,用字母写的是单词,你就可以在图片中找到所有内容,在Prolog行中进行转换(我的解决方案有12行,一行有2行).

[编辑]每个人都有自己的解决方案,这是我的:

solution(H1,H2,H3,V1,V2,V3) :-
    H1 = [_,A2,_,A4,_,A6,_],
    H2 = [_,B2,_,B4,_,B6,_],
    H3 = [_,C2,_,C4,_,C6,_],
    V1 = [_,A2,_,B2,_,C2,_],
    V2 = [_,A4,_,B4,_,C4,_],
    V3 = [_,A6,_,B6,_,C6,_],
    maplist(word, [H1,H2,H3,V1,V2,V3]).
Run Code Online (Sandbox Code Playgroud)

PS我最初写的是单词(H1),单词(H2)......


twi*_*rer 1

本身不是 Prolog 程序,而是使用约束逻辑编程的解决方案,可以在Hakan Kjellerstrand 的 CP 优秀博客中找到。它采用 ECLiPSe,但可以轻松适应其他具有有限域求解器的 Prolog 系统。使用 CLP 代替纯 Prolog 将使搜索速度更快。