Courses/CS 460/Fall 2005/Homework/Oscar Chen/Nov 5
From CSWiki
< Courses | CS 460 | Fall 2005 | Homework | Oscar Chen
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
% convert to integers for Mult
fun {ToInt L1}
{FoldL L1
fun {$ X Y}
{FD.plus {FD.times X 10} Y}
end 0}
end
proc {Mult L1 X L2}
{ToInt L1} * X =: {ToInt L2}
end
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}
{Mult Vars 1 [A B C D E F]}
{Mult Vars 2 [C D E F A B]}
{Mult Vars 3 [B C D E F A]}
{Mult Vars 4 [E F A B C D]}
{Mult Vars 5 [F A B C D E]}
{Mult Vars 6 [D E F A B C]}
{FD.distribute ff Vars}
end
in
{Browse {SearchAll Rotating}}
{ExploreAll Rotating}
end
Divisibility
local
fun {ToInt L1}
{FoldL L1
fun {$ X Y}
{FD.plus {FD.times X 10} Y}
end 0}
end
proc {Divisible Solution}
A B C D E F G H I J SixSum
Vars = [A B C D E F G H I J]
in
Solution = Vars
Vars ::: 0#9
{FD.distinct Vars}
% div by 0,1,3,9 ok
% div by 2,5
J =: 0
% div by 2,3 = div by 6
% div by 4,8
I :: [4 8]
% div by 7
% using test found at: http://www.jimloy.com/number/divis.htm
SixSum = {FD.plus {ToInt [A B C D]} {ToInt [E F G H I J]}}
{FD.modI SixSum 7} =: 0
{FD.distribute ff Vars}
end
in
{Browse {SearchOne Divisible}}
end

