Description
Specification
Write a Java program that reads in a text file like the sample below (wordSearch1.txt). The input file for the
program will have the letters in the word search grid, followed by a blank line and then words to find in the
puzzle.
The puzzle grid will be square, so you can find out the size of the puzzle by reading the first line of the input file
and counting the number of letters on the line. In the example below, there are 10 letters on the first line, so the
size of the puzzle grid is 10 by 10.
I recommend that you use at least two classes in your program. The class with the main method of the program
should be called Search. The program should get the name of the input file as a command-line parameter, so to
use the input file shown below, you would use a command line like this:
java Search wordSearch1.txt
See the notes page for this assignment for some sample code that uses command-line parameters.
In addition to the Search class, you might want to make a class that is used to represent the puzzle. Think in
terms of object-oriented design and figure out the best way to divide up the functionality (methods) between the
Search class and the puzzle class.
For each word listed after the grid, your program should attempt to find the word in the puzzle. If it finds the
word, it should print the word with the row and column of the first letter followed by the row and column of the
last letter. Row and column numbers start at 0 as in Java arrays, so in a 10 by 10 puzzle, the largest row or
column number will be 9 and the smallest will be 0. Make sure you print coordinates in the right order with the
row number first and the column number second.
If your program does not find the word in the puzzle, it should print a message to that effect, as shown in the
example below (JABBERWOCKY).
Print the messages for words in the order that the words appear in the input file.
Words can be vertical (top-to-bottom or bottom-to-top), horizontal (left-to-right or right-to-left), or diagonally
(four different directions), so there are a total of eight different orientations of words. Although this puzzle has
examples of all eight orientations, it’s missing some good test cases that you should try with your program.
Your program should work with any size of puzzle up to 100×100, as long as the grid is square (same number of
lines as there are letters in the first line), and for any number of search words up to 200. Be sure to define those
limits with named constants.
Sample input file
HGAMONIHRA
AOMOKAWONS
NFROLBOBDN
ARFSIHCAGE
LNIEEWONOK
GOLFUNDTHC
KOCATAOHBI
AMRERCGANH
SLGFAMALLC
ALLIGATORX
HORSE
COW
RHINO
JABBERWOCKY
CAT
DOG
ALLIGATOR
CHICKEN
FROG
BANTHA
MOOSE
LLAMA
Here is a link to a text file with the contents shown above: wordSearch1.txt
Here’s an image of the puzzle that makes it easier for a person to find the words:
Sample program output
HGAMONIHRA
AOMOKAWONS
NFROLBOBDN
ARFSIHCAGE
LNIEEWONOK
GOLFUNDTHC
KOCATAOHBI
AMRERCGANH
SLGFAMALLC
ALLIGATORX
HORSE found at start: 0, 0 end: 4, 4
COW found at start: 3, 6 end: 1, 6
RHINO found at start: 0, 8 end: 0, 4
JABBERWOCKY not found
CAT found at start: 6, 2 end: 6, 4
DOG found at start: 5, 6 end: 7, 6
ALLIGATOR found at start: 9, 0 end: 9, 8
CHICKEN found at start: 8, 9 end: 2, 9
FROG found at start: 8, 3 end: 5, 0
BANTHA found at start: 2, 7 end: 7, 7
MOOSE found at start: 0, 3 end: 4, 3
LLAMA found at start: 8, 8 end: 8, 4
Avoid repeated code
You should avoid using repeated code in your program. In particular, instead of having eight different loops to
search for words, with each loop looking for a word in a different direction (top to bottom, left to right, etc.) you
should have only one loop. Use the same loop to look for words in all eight directions.
Repeated code is difficult to maintain because it’s hard to keep it consistent. It’s also harder to test. I will deduct
up to ten points for repeated code in this program.
Notes
Here are some notes that might be helpful: notes.html
Turn in
Put your source files into a zip file and turn the zip file in on Canvas. Make sure that the class with the main
method of your program is named Search. Your files should not be inside a folder in the zip file, and there
should not be any files other than source files and an optional README.txt file. Class files will be ignored.
Points
10 Correctly submitted: zip file, Search class, no package
10 Gets input file name from command line parameter
20 Processes input file correctly and searches for all words in input list
40 Finds words in eight directions
10 Prints starting and ending coordinates correctly
10 Prints message for words that are not in the puzzle
100 TOTAL
Deductions:
-5 Coordinates are printed in the wrong order. The row number should be first and the column number should be
second.
-10 The messages for words are not printed in the same order that they occur in the input file.
-10 Repeated code.