Solving computationally the "True Genius: Grecian Computer" puzzle

Disclaimer: I’m not a mathematician. I’m merely a hobbyist that loves programming and puzzles. Professionally, I work in IT management.

For my birthday this year, my young nephew (much aware of my love for puzzles) gifted me a wooden brainteaser called “Grecian Computer” from the brand True Genius.

As described on the box, the goal is to “Turn the dials until all 12 columns add up to 42.” Rather than faffing about with trial and error, I figured it would be much more fun and educational to try my hand at writing a bit of Wolfram Language code to produce the solution.

My first step was to disassemble the puzzle to understand its structure: five “dials”, the bottom of which remains fixed in place while the remaining four may rotate through twelve positions. Each dial effectively contains a 4x12 matrix comprised of numbers and “holes” where numbers from lower dials may show through.

Using the Wolfram Language’s functions for handling lists of lists, the puzzle seems readily represented as a three dimensional array: five layers, each with four rows of twelve columns. Here, I represent “holes” as zeroes:

puzzle = {{{8, 3, 4, 12, 2, 5, 10, 7, 16, 8, 7, 8}, {4, 4, 6, 6, 3, 3,
      14, 14, 21, 21, 9, 9}, {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 
     15}, {11, 11, 14, 11, 14, 11, 14, 14, 11, 14, 11, 14}}, {{1, 0, 
     9, 0, 12, 0, 6, 0, 10, 0, 10, 0}, {3, 26, 6, 0, 2, 13, 9, 0, 17, 
     19, 3, 12}, {9, 20, 12, 3, 6, 0, 14, 12, 3, 8, 9, 0}, {7, 0, 9, 
     0, 7, 14, 11, 0, 8, 0, 16, 2}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0}, {22, 0, 16, 0, 9, 0, 5, 0, 10, 0, 8, 0}, {11, 26, 14, 1, 
     12, 0, 21, 6, 15, 4, 9, 18}, {17, 4, 5, 0, 7, 8, 9, 13, 9, 7, 13,
      21}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0}, {14, 0, 9, 0, 12, 0, 4, 0, 7, 15, 0, 0}, {11, 
     6, 11, 0, 6, 17, 7, 3, 0, 6, 0, 11}}, {{0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0}, {7, 0, 15, 0, 8, 0, 3, 0, 6, 0, 10, 
     0}}};

Next, we need to create a table of all of the possible permutations, rotating each of the four moving dials through its twelve possible positions, like a clock. I calculated there should be 20,736 possible permutations: 1x12x12x12x12:

puzzlePermutations = 
  Flatten[
   Table[{puzzle[[1]], RotateRight[puzzle[[2]], {0, a}], 
     RotateRight[puzzle[[3]], {0, b}], 
     RotateRight[puzzle[[4]], {0, c}], 
     RotateRight[puzzle[[5]], {0, d}]}, {a, 0, 11}, {b, 0, 11}, {c, 0,
      11}, {d, 0, 11}], 3];

Length[puzzlePermutations]

The next step was to “lift” the numbers from the lower dials to fill in the “holes” represented as zeroes:

Do[puzzlePermutations[[x]][[i]] = 
   ReplacePart[puzzlePermutations[[x]][[i]], 
    AssociationThread[
     Position[puzzlePermutations[[x]][[i]], 0] -> 
      Extract[puzzlePermutations[[x]][[i - 1]], 
       Position[puzzlePermutations[[x]][[i]], 0]]]], {x, 
   Length[puzzlePermutations]}, {i, 2, 5}];

From here, we just need to select the permutation(s) for which the columns in the top layer all add up to 42:

solution = Select[puzzlePermutations, ContainsExactly[Total@#[[5]], {42}] &];

This produces the sole solution to the puzzle, and we can see how we should turn each dial to solve it:

Array[MatrixForm[solution[[1]][[#]]] &, 5]

Finally, thanks to a bit of Wolfram Language code, the solved puzzle:

I had fun working through this. I’m sure there are more efficient or elegant ways to write this code and solve the puzzle, and I’d love to hear your thoughts.

Thanks for reading!

Christopher

25 Likes

Very cool Christopher. Interesting approach and nice use of WL functions such as AssociationThread and patterns. On the website it has a difficulty of 5, I wonder the average time it takes to solve manually.

4 Likes

news-congrads-kkluyshnik-02-04-19.jpg – you have earned Featured Contributor Badge 2015-11-02_10-07-11.png
Your exceptional post has been selected for our editorial column Staff Picks http://wolfr.am/StaffPicks and Your Profile is now distinguished by a Featured Contributor Badge and is displayed on the Featured Contributor Board. Thank you!

1 Like

I ended up solving this using Python using basically the same approach you used. greek_computer/greek_computer.ipynb at main · brockbrownwork/greek_computer · GitHub

I didn’t realize that you could take the puzzle apart; I just transcribed each layer using speech to text and looking through the little holes lol. I am definitely curious though how you can solve this without brute force, or at least with fewer combinations, would like to try again later. Maybe a breadth first search approach would work better, i.e.: avoiding all paths where the sum is more than 42?

1 Like