My brother got me a pretty cool puzzle for Christmas which claims to
have “Over 300,000 wrong ways to assemble the pieces, but only One right
way!”. The only hint/instructions are that the final solution will be a
3x3 square with six points and six holes on the outside.
Both my wife and I played around with solving it for a decent amount of
time each and together some, probably a total of a couple hours. We both
could get 8 of the nine pieces placed (multiple times) but could never
find a setup that would fit the final piece. In talking about the puzzle
we discussed the brute force approach to solving it, trying every piece
in every possible place and rotation, …
I realized that it would be pretty cool to actual code up a solution. So
I took the piece and threw them all out in the same orientation on the
kitchen floor and took a picture of them. I then cut them up with gimp,
and used convert to generate the 90, 180, and 270 rotated version. After
that it was a bit of html and css, and a decent amount of hacking around
in js (thought it would be the best way to do it so that others could
see/watch.) I started off making things more complicated than they
needed to be trying to keep track of what’d be placed where. After that
wrong turn I backtracked and realized that it would be much cleaner and
simpler to just have the pieces know when they’ve been placed and try to
place them again and just ask if that’s possible.
After that change and getting rid of the rest of the wrong-turn it
probably took about 30m, maybe an hour to finish things up and what you
see to the right is the result, and the live version is below. The
example is running at 256 tries a second (if you’re browser is up to
I was fully expecting the solver to run for a couple hours trying all of
the possibilities, but by random chance I managed to lay out the pieces,
cut them up, and enter them in to the code in an order that gets to the
correct answer after only 3554 placements. So what could of been hours
takes less than a minute.
It was thrown together as quickly and is in the style of a hack rather
than a good/clean solution, but I’m reasonably happy with it. Let me
know what you think.