Write a program of wordSearch puzzle that use the following
Write a program of wordSearch puzzle that use the following text file as an input. The output should be like this: PIXEL found (left) at (0,9). ( Use JAVA Array ) .Please do not use arrylist and the likes!
Hints
 • The puzzle can be represented as a right-sized two-dimensional array of characters (char).
 • A String can be converted into a right-sized array of characters via the String method toCharArray.
. A word can occur in any of 8 directions starting from a square in the puzzle(but not enter by the users):
 o to the right (normal text: MEMORY above)
 o to the left (backwards: PIXEL)
 o downwards (INTERNET)
 o upwards (GOOGLE)
 o diagonally downwards to the right (APPLICATION)
 o diagonally downwards to the left (CHAT)
 o diagonally upwards to the right (WIRELESS)
 o diagonally upwards to the left (PROGRAMMER)
 • Consider writing separate methods such as:
 private boolean searchRight ( int x, int y, String word ) {
 that look for a word starting from position (x,y) in the puzzle and proceeding
 in the designated direction (right in this case). The method returns true if the
 word is found in the designated direction starting from the indicated position. You
 would have 8 such methods. Each of these methods will be quite similar.
 • A word cannot occur starting from (x,y) if there isn’t enough room from
 (x,y) to the edge of the puzzle in the designated direction. For example, if the
 puzzle is 10×10, we are checking from position (3,7) to the right and the word
 is more than 3 characters in length.
 • Consider developing the solution in phases such as:
 1. read and display puzzle
 2. check for a single word in one direction only (e.g. right)
 3. repeatedly add the ability to check for a single word in each of the other 7 directions
 4. add the ability to search for multiple words.
 • Don’t use the big puzzle for testing. Make special small puzzles to test each of the
 8 search methods above such as the included puzzle right.txt that has only one word written to the right.
text file
18 18
 T P I R C S A V A J L E X I P I G E
 L I A M E M O R Y M M O U S E N I L
 C R A B K S A T X I N U Y H S T F G
 D N D I R E C T O R Y E T A O E O O
 P O W E R S U P P L Y N I R F R L O
 U C O A S A E V A S S C R E T N D G
 K I R O P K T Y P S H R U W W E E L
 C D D E C P R E E A H Y C A A T R M
 A N R I M A L L T D R P E R R E A T
 B O L E N M E I E K E T S E E P H H
 R C K I P R A F C V R I I R S U L M
 E E B E I A R R I A B O O T M B O R
 N S T W R A P R G R T N W B I N G O
 N O O S G N D L O O D I N T I O I S
 A N G M A K A U L A R A O T E A N R
 C A E A S P T L T A I P O N R N D U
 S N F I R E W A L L W R E I K O O C
 T F D P R D H T O O T E U L B Y T E
 JAVASCRIPT
 PIXEL
 INTERNET
 GIF
 GOOGLE
 LCD
 EMAIL
 MEMORY
 MOUSE
 SHAREWARE
 TASKBAR
 UNIX
 SECURITY
 SOFTWARE
 FOLDER
 ICON
 DIRECTORY
Solution
/** * @fileName WordSearch.java * @author * @since 24/1/17 */ package wordpuzzel; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Arrays; import java.util.Scanner; public class WordSearch { private static char[][] board; private static int row; private static int col; private static String[] words; /** * @param fileName * @throws FileNotFoundException */ public static void readPuzzle(String fileName) throws FileNotFoundException { Scanner sc = new Scanner(new FileReader(fileName)); row = sc.nextInt(); col = sc.nextInt(); board = new char[row][col]; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { board[i][j] = sc.next().charAt(0); } } int count = 0; String str = \"\"; while (sc.hasNext()) { str += sc.nextLine() + \" \"; } words = str.trim().split(\" \"); } /** * This function will display the puzzle */ public static void displayPuzzle() { for (char[] word : board) { System.out.println(Arrays.toString(word)); } } public static void searchRight(String word) { int i, j, k; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { int count = 0; for (k = j; k < col && count < word.length(); k++) { if (word.charAt(count) != board[i][k]) { break; } count++; } if (count == word.length()) { System.out.println(i + \" \" + (k - 1)); System.out.println(word+\"found(right) at (\"+i + \",\" + (k -1)+\")\"); } } } } public static void searchLeft(String word) { int i, j, k; for (i = row - 1; i >= 0; i--) { for (j = col - 1; j >= 0; j--) { int count = 0; for (k = j; k >= 0 && count < word.length(); k--) { if (word.charAt(count) != board[i][k]) { break; } count++; } if (count == word.length()) { if (k == -1) System.out.println(word+\"found(left) at (\"+i + \",\" + (k + 1)+\")\"); else System.out.println(word+\"found(left) at (\"+i + \",\" +k +\")\"); } } } } public static void searchDownwards(String word) { int i, j, k; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { int count = 0; for (k = j; k < col && count < word.length(); k++) { if (word.charAt(count) != board[k][i]) { break; } count++; } if (count == word.length()) { System.out.println(word+\"found(downwards) at (\"+j + \",\" + i+\")\"); } } } } public static void main(String[] args) throws FileNotFoundException { readPuzzle(\"input.txt\"); displayPuzzle(); System.out.println(Arrays.toString(words)); searchRight(\"MEMORY\"); searchLeft(\"JAVASCRIPT\"); searchLeft(\"PIXEL\"); searchDownwards(\"INTERNET\"); } }

