Courses/CS 460/Fall 2005/Homework/Oscar Chen/Nov 5

From CSWiki

Jump to: navigation, search

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