No description
Find a file
Gonçalo S. Martins 526e26c4b8 Update readme.
2016-05-19 09:59:17 +01:00
crossword_generator.py Increase default timeout, add parameter for desired occupancy. Update readme. 2016-05-19 09:36:05 +01:00
LICENSE Add license. 2016-05-18 08:59:26 +01:00
readme.md Update readme. 2016-05-19 09:59:17 +01:00

Crossword Generator

This very simple Python script generates a clueless crossword puzzle. It harnesses the capabilities of Python and LaTeX to output the puzzle in a printable PDF.

Algorithm

I purposefully designed and implemented this little project without performing research on crossword generation techniques; I wanted to see if I could do it by myself. The very simple algorithm that is implemented here is as follows:

  1. The technique receives a list of words, in a .txt file (I tested using these lists).
  2. A number (100, by default) of words are chosen randomly from the list that is given, and these are the words that will be used hereafter.
  3. The technique expands the list of words into a list of possibilities, where each possibility encodes a possible starting location for a word, as well as its direction. This essentially constitutes all possible words that can be placed into the grid.
  4. A new word is taken from the list of possibilities and placed on the grid. This makes it so a number of possibilities are now invalid, and these are removed from the list. Steps 3 and 4 are repeated until the grid is as full as we want it to be.

Performance Considerations

On my consumer-grade machine (i7-6700HQ) the algorithm can generate a 20x20 grid with 50% completion in some 45 seconds. I am currently looking into ways of improving this mark, and already have a ton of ideas, so stay tuned!

Usage

For now (until I implement argparsing), all you have to do is run the script on a folder where a "words.txt" file with one word per line exists. I recommend using the aforementioned lists!