Indexed based guesser

This was my attempt from the night.

The first thing it does is to index the entire dictionary according to letter positions in each word. This makes it take a long time to load: 40 seconds on my MBP.

It also determines how frequently each letter appears in words, depending on word length, as this changes for varying length words. Letter frequency is only counted once per word. These distributions are then used for the initial guesses, until a letter is guessed correctly.

After an initial guess finds a letter, a vector is returned that contains at least one letter in it. This is converted into a series of vectors (one per letter) that are used to look up the word index. The more letters, the more lookups, and the resulting word sets are then intersected to find the possible candidates. These are then scanned for letter frequencies (only counting each word once when considering each letter), and the most common letter is chosen next.

The guesser has a success rate of approximately 90%. Test rounds of 100 take about 4 seconds on my MBP.