密码算术拼图Prolog

时间:2014-05-26 22:06:48

标签: prolog cryptarithmetic-puzzle

我在Prolog中有以下任务:

找到字母到数字的分配(每个字母到不同的数字),以便以下产品成立:

EAU * EAU = OCEAN

如果代码如下:

:- use_module(library(clpfd)).

ocean(L) :-
   L = [O,C,E,A,N],
   L2 = [U|L],
   all_different(L2),
   L2 ins 0..9,
   EAU #= E*100 + A*10 + U,
   OCEAN #= O*10000 + C * 1000 + E*100 + A*10 + N,
   EAU * EAU #= OCEAN,
   labeling([], L2).

有人可以解释以下内容:

L2 ins 0..9是什么意思(为什么这些数字之间的范围是?)

将字母乘以这些特定数字* 10000 + C * 1000 + E * 100和E * 100 + A * 10 + U等是什么意思?

非常感谢您提供的任何指导。

1 个答案:

答案 0 :(得分:1)

'0..9'只表示一个数字:0,1,2,3,4,5,6,7,8或9。

EAU #= E*100 + A*10 + U表示数字'EAU'由该特定顺序的数字'E','A'和'U'组成。例如,如果您的数字为735 = 7 * 100 + 3 * 10 + 5。

类似于“OCEAN”,一个五位数字。

此外,您提供的程序中的限制对我来说不完整。还应该说明每个数字的第一个数字大于0,因为通常我们不使用带有前导零的数字,如'0123'。