# pfp_crossword

A crossword generator and solver in Haskell. Built in Fall 2020 by Gustaf Ahdritz (gwa2107) and Lucie le Blanc (ll3163) for Prof. Stephen Edwards's COMS 4995 — Parallel Functional Programming course.

### Build
`stack build`
`stack install`

### Run
`crossword <dimension> <min_word_length> <probability_threshold> <dict_filepath> <deterministic> <parallel>`
- `<dimension>`: even integer describing the dimensions of the grid.
- `<min_word_length>`: integer describing minimum word length.
- `<probability_threshold>`: floating-point value between 0 and 1 representing the probability of a given square being filled in.
- `<dict_filepath>`: absolute path to the dictionary file. Words must be space- and/or line-separated.
- `<deterministic>`: "y" or "N", indicating whether to use a fixed seed.
- `<parallel>`: "y" or "N", indicating whether the program should use an algorithm optimized for parallelism

### Sources

Dictionary from [first20hours/google-10000-english](https://github.com/first20hours/google-10000-english/blob/master/google-10000-english-usa-no-swears.txt), a list of the 10000 most common American English words ordered by decreasing frequency. We truncated this list to 1000 words.
