相关疑难解决方法(0)

与Prolog CLPFD的密码拼图

我最近在Google Play应用商店中发现了一款​​名为Cryptogram的小游戏.有许多类似于这个的应用程序.我们的想法是将数字与颜色相匹配,以使所有方程听起来都是正确的.

我能够很快地解决问题1-8和问题10,但事实证明问题9对我来说更加困难.

问题9 问题9

经过一段时间的修补和猜测,我放弃了,决定编写一个解决方案.我使用Prolog/Datalog作为一些小任务作为本科生以及一些Project Euler问题.以前我见过使用Prolog的Constraint Logic Programming over Finite Domains(clpfd)库的15行数独求解器,我决定自己试一试.我正在使用SWI-Prolog.

:- use_module(library(clpfd)).
problem(Colors) :-
    Colors = [Pink, Cyan, Yellow, Green, Purple, Red, Brown, White, Lime],
    Colors ins 0..9,
    all_distinct(Colors),
    % The leading digit of a number can't be 0
    Pink #\= 0,
    Red #\= 0,
    White #\= 0,
    Green #\= 0,
    Lime #\= 0,
    Cyan #\= 0,
    % I originally tried to write a predicate generalizing numbers and a list of …
Run Code Online (Sandbox Code Playgroud)

prolog clpfd cryptarithmetic-puzzle

7
推荐指数
2
解决办法
338
查看次数

获得谓词解析的顺序

看看以下目标(我使用来自Markus Triska的clpfd的swi-prolog):

result(Input,Result) :-
    Input #> 10,
    Result=decline.
result(Input,Result) :-
    Input in 0..20,
    Result=offer.
Run Code Online (Sandbox Code Playgroud)

可能的查询如下所示:

?- result(15,B).
B = decline ;
B = offer.
Run Code Online (Sandbox Code Playgroud)

我想添加订单或某种解决方案优先级.如果"拒绝"是有效的响应Input=15,则不应再考虑第二个目标,因此只有B=decline解决方案而不是B=offer.

我知道我可以添加一个!/0然后反过来也行不通.给我这个谓词的所有可能答案.

考虑到这个例子,a Result=offer应该只适用于Input 0..10,否则应该触发较高的先前下降目标.

当我尝试在谓词中考虑订单时,我是否认为太迫切了?

prolog clpfd

5
推荐指数
1
解决办法
459
查看次数

标签 统计

clpfd ×2

prolog ×2

cryptarithmetic-puzzle ×1