A few days ago the YouTube channel Alpha Phoenix uploaded a
video about running Conway’s Game of Life backwards. It’s a great video,
but the solution Alpha Phoenix used was based on using a constraint solver and
it inspired me to try implementing my own solver for reverse Game of Life to see how a backtracking search would perform in comparison.
So I wrote a backtracking search solution in Julia. It runs pretty quickly on small inputs but gets exponentially slower for larger inputs.
Here is an example of one of my test cases:
The largest test I did so far was a rasterization of the text REVERSE. My implementation only managed to run it 3 steps backwards and got stuck on the 4th step:
The problem with my solutions is that they grow in size, each predecessor state requires searching over more pixels which slows down the search a lot. For the REVERSE example the 3rd step took 15 seconds but the 4th step did not complete: I stopped it after more than 4 hours.
Update: I rewrote and optimized my search function and finally the 4th iteration of the REVERSE example finished without a solution after 15 hours.
If my code is correct the 3rd iteration shown above is a so-called Garden of Eden, that is, a game state which has no predecessors.
Julia Code
Anyway here is my Julia code if you want to try it for yourself:
This script expects a file named big_reverse.txt in the working directory containing a text representation of a Game of Life board where # denotes a living cell (all other non-newline characters are treated as dead). For example: