Courses/CS 460/Fall 2005/Homework/Sean Tseng/Nov 5
From CSWiki
< Courses | CS 460 | Fall 2005 | Homework | Sean Tseng
%LET THERE BE LIGHT
local
proc {Light Solution}
L E T H R B I G
Vars = [L E T H R B I G]
in
Solution = [L E T]#[T H E R E]#[B E ]#[L I G H T]
Vars ::: 0#9
{FD.distinct Vars}
L \=: 0
T \=: 0
B \=: 0
100*L + 10*E + T
+ 10000*T + 1000*H + 100*E + 10*R + E
+ 10*B + E
=: 10000*L + 1000*I + 100*G + 10*H + T
{FD.distribute ff Vars}
end
in
{Browse {SearchAll Light}}
end
%Rotate Digit
local
proc {Mult L1 X L2}
A B C D E F R S T U V W in
L1 = [A B C D E F]
L2 = [R S T U V W]
(A*100000 + B*10000 + C*1000 + D*100 + E*10 + F)
* X =:
(R*100000 + S*10000 + T*1000 + U*100 + V*10 + W)
end
proc {RotateDigit Ans}
A B C D E F
in
Ans = [A B C D E F]
Ans ::: 0#9
{Mult [A B C D E F] 1 [A B C D E F]}
{Mult [A B C D E F] 3 [B C D E F A]}
{Mult [A B C D E F] 2 [C D E F A B]}
{Mult [A B C D E F] 6 [D E F A B C]}
{Mult [A B C D E F] 4 [E F A B C D]}
{Mult [A B C D E F] 5 [F A B C D E]}
{FD.distinct Ans}
{FD.distribute ff Ans}
end
in
{Browse {SearchAll RotateDigit}}
end
%Divisible Digits
local
fun {IsDigit}
choice 1[] 2 [] 3 [] 4 [] 5 [] 6 [] 7 [] 8 [] 9 end
end
proc {ModConstr L1 N}
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 in
L1 = [A0 A1 A2 A3 A4 A5 A6 A7 A8 A9]
(A0 * 1000000000 +
A1 * 100000000 +
A2 * 10000000 +
A3 * 1000000 +
A4 * 100000 +
A5 * 10000 +
A6 * 1000 +
A7 * 100 +
A8 * 10 + A9) mod N =: 0
end
proc {DivDigit Var}
A B C D E F G H I J
in
Var = [A B C D E F G H I J]
Var ::: 0#9
{FD.distinct Var}
A =: {IsDigit}
B =: {IsDigit}
C =: {IsDigit}
D =: {IsDigit}
E =: {IsDigit}
F =: {IsDigit}
G =: {IsDigit}
H =: {IsDigit}
I =: {IsDigit}
J =: 0
{ModConstr [A B C D E F G H I J] (9 * 8 * 7 * 6 * 5)}
{FD.distribute ff Var}
end
in
{Browse {SearchAll DivDigit}}
end

