Courses/CS 460/Fall 2005/Homework/Jay Donnell/Nov 5
From CSWiki
< Courses | CS 460 | Fall 2005 | Homework | Jay Donnell
[edit] LET + THERE + BE = LIGHT
local
proc {Light Vars}
L E T H R B I G
in
Vars = [L E T H R B I G]
Vars ::: 0#9
{FD.distinct Vars}
L \=: 0
T \=: 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}}
{ExploreAll Light}
end
[edit] Rotating digits
local
fun {Convert ListIn}
{FoldL ListIn fun {$ Z E} {FD.plus {FD.times Z 10} E} end 0}
end
proc {Mult L1 X L2}
{Convert L1} * X =: {Convert L2}
end
proc {Digits Solution}
A B C D E F
in
Solution = [A B C D E F]
Solution ::: 1#9
{FD.distinct Solution}
{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.distribute ff Solution}
end
in
{Browse {SearchAll Digits}}
{ExploreAll Digits}
end
[edit] Divisible digits
local
fun {Convert L}
{FoldL L fun {$ I J} {FD.plus {FD.times I 10} J} end 0}
end
proc {DivisibleDigits Solution}
A B C D E F G H I J
in
Solution = [A B C D E F G H I J]
%Solution = [A H I J]
Solution ::: 0#9
{FD.distinct Solution}
%has to end in 0
J =: 0
% divisible by 8?
{FD.modI {Convert [H I J]} 8} =: 0
%divisible by 7?
%the second method is much faster than the first.
%{FD.modI {FoldR Solution fun {$ El J} {FD.plus {FD.times 5 El} I} end 0} 7} =: 0
{FD.modI {FoldL Solution fun {$ El J} {FD.plus {FD.times 3 El} J} end 0} 7} =: 0
{FD.distribute ff Solution}
end
Solution
in
{Browse {SearchAll DivisibleDigits}}
%{ExploreOne DivisibleDigits}
end

