M2M Day 248: I built a computer program to help me memorize eight years of crossword puzzle clues and answers

Max Deutsch
2 min readJul 7, 2017

--

This post is part of Month to Master, a 12-month accelerated learning project. For July, my goal is to solve a Saturday New York Times crossword puzzle in one sitting without any aid.

Yesterday, I aggregated 100,000 lines of crossword puzzle data off the internet, which include the clues, answers, and explanations for all NYT puzzles between 2009–2016.

My hope is that I can memorize all 100,000 lines of data in the next ~2 weeks, theoretically improving my crossword solving abilities in a major way.

Then again, this feat would require that I memorize 7,000 lines of data per day, which just doesn’t seem manageable with my current schedule. So, I’m going to have to pick and choose what to memorize and what to leave out.

My choice is straightforward: I’ll remove all the data that corresponds to non-Saturday puzzles, leaving “only” 12,707 lines of Saturday-specific data.

With this new smaller dataset, I’ll need to memorize 800 lines per day, which still seems like a lot, but is much more doable.

Of course, in it’s current form (as a giant list), this kind of memorization would be sensationally painful and likely not effective. So, to make the memorization a bit more controlled and game-like, I built a “Crossword Trainer” computer program.

The program is only 17 lines of Python code, and runs in my computer’s Terminal.

import csv
from random import randint
clues = []with open('crossworddata.csv','rb') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
for row in reader:
clues.append(row)

length = len(clues)
while True:
randNumber = randint(1,100)
print clues[randNumber][0]
print str(len(clues[randNumber][1])) + ' letters'
raw_input()
print clues[randNumber][1]
raw_input()
print clues[randNumber][2]
raw_input()

Once the program launches, here’s what happens:

  1. First, the program displays a single, random crossword clue. Underneath the clue, the program displays the number of letters in the answer.
  2. Then, if I click Enter, the program reveals the answer (to the clue).
  3. If I click Enter again, the program reveals additional information about the clue-answer pair.
  4. Finally, with one more Enter, the program displays a new, random clue, starting the process over.

Here’s what it looks like in action:

Today, I trained for an hour using the program, and am feeling quite optimistic about the results so far.

I’ll explain my exact training method tomorrow.

Read the next post. Read the previous post.

Max Deutsch is an obsessive learner, product builder, guinea pig for Month to Master, and founder at Openmind.

If you want to follow along with Max’s year-long accelerated learning project, make sure to follow this Medium account.

--

--