Jacob Wood
Objective
Produce an interesting crossword puzzle that manifests the theme I have been mulling over.

My friends have made a bunch of incredible crosswords over the years. I have had this idea for a crossword theme for a long time and finally put it together.

Before reading any spoilers head on over to https://david.vaskos.com/crossword/7 (thanks David!) to do the crossword online or print out a .pdf version available here. It is mostly free of inside jokes.

Board Design

Inspiration

The theme of the puzzle is roughly "Life" and the intent was to draw together John Conway's Game of Life with Douglas Adams' Answer to the Ultimate Question of Life, The Universe, and Everything.

The theme of the puzzle, to give it all away, is that when the black spaces on the board are simulated in The Game of Life the meaning of life should emerge.

Ideal Board

The ideal game board in my mind would have these qualities:

We unfortunately couldn't get all the way there, but we got close and managed to meet the important ones!

Board Exploration

To complete the board design we need to find a way to search through the design space, which is huge (there are 2^(21*21) = 5.7*10^132 possible boards), for a specific pattern that results in the number 42 drawn in black squares.

The Game of Life is meant to simulate a complex system, where local forward propagation is easy but it is inherently difficult to solve the problem in reverse or make deductions from global structure. Fortunately it is not necessary to brute-force sweep the design space for suitable starting grids, instead we can turn to some tools that the vibrant Game of Life community has put together.

Logic Life Search (lls) is a Python program that searches for patterns in cellular automata. It takes in a starting pattern definition and a final pattern definition and translates the automata propagation into a Boolean satisfiability problem (SAT). We can then use a freely available SAT solver (like lingeling or cadical) to search for solutions to the SAT problem.

We can also make use of Golly to visualize solutions and get a feel for the board layouts.

The initial input to lls should be a wide open 21x21 board, which looks like:

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 * * * * * * * * * * * * * * * * * * * * * 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

And the desired end state is a large text 42, which looks like:

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 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 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 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 1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0
0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 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 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
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 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

The call to lls was wrapped in a Python script and allowed to run in parallel over a few days. Results were easily found for 1, 2, and 3 generations in the past. Results for 4 generations in the past (and further) were not uncovered in the maximum specified 100 hours of solve time.

Here is an example of boards that work in 1, 2, and 3 generations:

More generations of evolution seemed more exciting to me, so I restricted the options to the 20 unique 3 generation boards that the solver produced:

Of these, I selected the bottom right solution as the most "crossword-looking" starting point for the puzzle layout.

Board Fill

To begin the filling process I identified the theme answers I wanted to incorporate:

The board filling was done with help from QXW. QXW allows a user to import gigantic lists of words and then attempts to solve the remaining puzzle while you type in your desired answers. QXW will suggest answers that fit with the current layout. The most helpful feature is the red square that appears in a box to show you when you are running low on possible letters that make sense there (or when you will have to get creative with an answer).

As the puzzle was filled out I iterated on the location of the black squares surrounding the resulting 42.

The first attempt may have ultimately resulted in a better puzzle. I compromised the clean look of the simulated puzzle to produce a solution that looked more crossword like.

But ultimately could not live with the fact that the 42 did not come out standing alone.

So I went back to the original layout and took care to only add additional black squares in patterns that would wash out in three generations. The final completed puzzle has a few sore spots but ultimately I am pretty happy with how it turned out.

Clue Writing

Numbering and clue writing was done manually in LibreOffice Calc because I could not get QXW to number the single letter answers but thought they would be interesting to write clues for.

Here are a few of my favorite clues:

Ingredients

Thank you to the following software projects that made the creation of this puzzle possible: