Courses/CS 460/Fall 2005/Homework/Josh Cain/Nov 5
From CSWiki
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
Rotating Digits
local
proc {Rotating ?Solution}
A B C D E F
Vars = [A B C D E F]
in
Solution = Vars
Vars ::: 1#9
{FD.distinct Vars}
{MakeInt Vars} * 3 =: {MakeInt [B C D E F A]}
{MakeInt Vars} * 2 =: {MakeInt [C D E F A B]}
{MakeInt Vars} * 6 =: {MakeInt [D E F A B C]}
{MakeInt Vars} * 4 =: {MakeInt [E F A B C D]}
{MakeInt Vars} * 5 =: {MakeInt [F A B C D E]}
{FD.distribute ff Vars}
end
proc {MakeInt List ?I}
I = {FoldL List fun {$ I J} {FD.plus {FD.times 10 I} J} end 0}
end
in
{Browse {SearchAll Rotating}}
end
Divisible Digits
local
proc {Divisible ?Solution}
D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
Vars = [D1 D2 D3 D4 D5 D6 D7 D8 D9 D10]
in
Solution = Vars
Vars ::: 0#9
{FD.distinct Vars}
{MyMod List 9} := 0
{MyMod List 8} := 0
{MyMod List 7} := 0
{MyMod List 6} := 0
{MyMod List 5} := 0
{MyMod List 4} := 0
{MyMod List 3} := 0
{MyMod List 2} := 0
{FD.distribute ff Vars}
end
proc {MyMod List N ?M}
D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
in
List = [D1 D2 D3 D4 D5 D6 D7 D8 D9 D10]
M = (D1*1000000000 + D2*100000000 + D3*10000000 + D4*1000000 + D5*100000 + D6*10000 + D7*1000 + D8*100 + D9*10 + D10) FD.modI N
end
in
{Browse {SearchAll Divisible}}
end

