Word searches are a type of puzzle in which a grid of letters is provided, along side a series of words. The task is then to find the given words inside the grid of letters. Depending on the word search itself, the words can be found in different orientations, left-to-right, top- to-bottom, or even at angles. While these are not terribly taxing puzzles compared to, for example, a crossword, or a sudoku, word searches remain a simple and entertaining type of puzzle for all ages. From a programmer's perspective, word searches create two interesting, and closely re- lated, challenges. First, given a 2d grid of characters and a specific string - determine whether or not the string is present, and if so report not only the location, but direction at which the word can be found. Second, given a target size, and a list of words, generate a pseudo-random 2d grid of characters such that all (or most) of the given words can be found in the generated grid. By the end of this project you should have a program capable of solving both of these problems.