Download or view DriveYaNuts.frink in plain text format
/** Solver for the Drive Ya Nuts puzzle:
http://www.samstoybox.com/toys/DriveYaNuts.html
solution:
http://www.hasbro.com/common/instruct/DriveYaNuts.PDF
*/
nuts = [[1,2,3,4,5,6],
[1,4,3,6,5,2],
[1,4,6,2,3,5],
[1,6,2,4,5,3],
[1,6,4,2,5,3],
[1,6,5,3,2,4],
[1,6,5,4,3,2]]
/** Now make a new array of dictionaries which map from
(number on nut) to (position on nut) where (position on nut) is 0-based. */
nutPositions = new array
for nut=nuts
{
nutPos = new dict
for i=0 to 5
nutPos@(nut@i) = i
nutPositions.push[nutPos]
}
nutNums = array[0 to 6]
for pos = nutNums.permute[]
{
nut0index = pos@0
nut0pos0 = nuts@nut0index@0
nut1index = pos@1
nut1rotation = (3 - nutPositions@nut1index@nut0pos0) mod 6
nut2index = pos@2
nut0pos1 = nuts@nut0index@1
nut2rotation = (4 - nutPositions@nut2index@nut0pos1) mod 6
nut1pos2 = nuts@nut1index@((2 - nut1rotation) mod 6)
nut2pos5 = nuts@nut2index@((5 - nut2rotation) mod 6)
if (nut1pos2 != nut2pos5)
next
nut3index = pos@3
nut0pos2 = nuts@nut0index@2
nut3rotation = (5 - nutPositions@nut3index@nut0pos2) mod 6
nut2pos3 = nuts@nut2index@((3 - nut2rotation) mod 6)
nut3pos0 = nuts@nut3index@((0 - nut3rotation) mod 6)
if (nut2pos3 != nut3pos0)
next
nut4index = pos@4
nut0pos3 = nuts@nut0index@3
nut4rotation = (0 - nutPositions@nut4index@nut0pos3) mod 6
nut3pos4 = nuts@nut3index@((4 - nut3rotation) mod 6)
nut4pos1 = nuts@nut4index@((1 - nut4rotation) mod 6)
if (nut3pos4 != nut4pos1)
next
nut5index = pos@5
nut0pos4 = nuts@nut0index@4
nut5rotation = (1 - nutPositions@nut5index@nut0pos4) mod 6
nut4pos5 = nuts@nut4index@((5 - nut4rotation) mod 6)
nut5pos2 = nuts@nut5index@((2 - nut5rotation) mod 6)
if (nut4pos5 != nut5pos2)
next
nut6index = pos@6
nut0pos5 = nuts@nut0index@5
nut6rotation = (2 - nutPositions@nut6index@nut0pos5) mod 6
nut5pos0 = nuts@nut5index@((0 - nut5rotation) mod 6)
nut6pos3 = nuts@nut6index@((3 - nut6rotation) mod 6)
if (nut5pos0 != nut6pos3)
next
nut6index = pos@6
nut6pos1 = nuts@nut6index@((1 - nut6rotation) mod 6)
nut1pos4 = nuts@nut1index@((4 - nut1rotation) mod 6)
if (nut6pos1 != nut1pos4)
next
println["Matching: $pos"]
println["Nut $nut0index " + nuts@nut0index + " is at the center,"]
println[" with digit $nut0pos0 at its top."]
println["Clockwise from top are nuts:"]
for i=1 to 6
println[" " + pos@i + " " + nuts@(pos@i)]
}
Download or view DriveYaNuts.frink in plain text format
This is a program written in the programming language Frink.
For more information, view the Frink
Documentation or see More Sample Frink Programs.
Alan Eliasen was born 20217 days, 23 hours, 27 minutes ago.