Prolog 密码算术难题序言
我在Prolog中有以下任务: 查找字母到数字的分配(每个字母到不同的数字),以便以下产品适用: 水*水=海洋 如果代码如下所示:Prolog 密码算术难题序言,prolog,cryptarithmetic-puzzle,Prolog,Cryptarithmetic Puzzle,我在Prolog中有以下任务: 查找字母到数字的分配(每个字母到不同的数字),以便以下产品适用: 水*水=海洋 如果代码如下所示: :- 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
:- 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等有什么意义
非常感谢您提供的指导。'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
类似地,“海洋”是一个五位数的数字
此外,您提供的程序中的约束在我看来是不完整的。还应该说明的是,每个数字的第一个数字都大于0,因为通常我们不使用带前导零的数字,如“0123”。您应该查看此页以了解代码(可能会修复它)!