import java.io.*; import java.util.*; public class Wordsearch { private char[][] board; public Wordsearch(int rows, int cols) { board = new char[rows][cols]; for (int i=0;i<rows;i++) { for (int j=0;j<cols;j++) { board[i][j]='-'; } } } public Wordsearch() { this(20,20); } public String toString() { String s=""; for (int i=0;i<board.length;i++) { for (int j=0;j<board[i].length;j++) { s=s+board[i][j]; } s=s+"\n"; } return s; } public addWord(int R,int C,int DeltaR,int DeltaC,String word){ int r,c; if (DeltaR < -1 || DeltaR > 1 || DeltaC < -1 || DeltaC > 1 || (DeltaR == 0 && DeltaC == 0) ){ return false; } r = R; c = C; for (int i = 0; i < word.length();i++){ try{ if (board[r][c] != "-" && board[r][c]!=word.charAt(i)){ return false; } } catch (ArrayIndexOutOfBoundsException e){ return false; } r = R + DeltaR; c = C + DeltaC; } r = R; c = C; for (int i = 0; i < word.length();i++){ board[r][c] = word.charAt(i); r = r + DeltaR; c = c + DeltaC; } return true; } public boolean addWordRand(String w){ add } public boolean AddWordH(int r,int c,String word){ if (board.length >= c + word.length()){ for (int i = 0;i < word.length();i++){ if (board[r][c+i] != '-' && board[r][c+i] != word.charAt(i)) return false; } for (int i = 0;i < word.length();i++){ board[r][c+i] = word.charAt(i); } return true; } return false; } public boolean AddWordHback(int r,int c,String word){ if (board.length >= c + word.length() && c >= word.length()){ for (int i = 0;i < word.length();i++){ if (board[r][c+i] != '-' && board[r][c+i] != word.charAt(i)) return false; } for (int i = 0;i < word.length();i++){ board[r][c+i] = word.charAt((word.length() - 1) - i); } return true; } return false; } //Our original idea for AddWordH, but it //turned out to be AddWordV..... public boolean AddWordV(int r,int c,String word){ if (board[r].length >= r + word.length() && c >= word.length()){ for (int i = 0;i < word.length();i++){ if (board[r+i][c] != '-' && board[r+i][c] != word.charAt(i)) return false; } for (int i = 0;i < word.length();i++){ board[r+i][c] = word.charAt(i); } return true; } return false; } public boolean AddWordVback(int r,int c,String word){ if (board[r].length >= r + word.length() && c >= word.length()){ for (int i = 0;i < word.length();i++){ if (board[r+i][c] != '-' && board[r+i][c] != word.charAt(i)) return false; } for (int i = 0;i < word.length();i++){ board[r+i][c] = word.charAt((word.length() - 1) - i); } return true; } return false; } v public boolean AddWordD(int r,int c,String word){ if (board[r].length >= r + word.length() && c >= word.length()){ for (int i = 0;i < word.length();i++){ if (board[r+i][c+i] != '-' && board[r+i][c+i] != word.charAt(i)) return false; } for (int i = 0;i < word.length();i++){ board[r+i][c+i] = word.charAt(i); } return true; } return false; } public boolean AddWordDback(int r,int c,String word){ if (board[r].length >= r + word.length() && c >= word.length()){ for (int i = 0;i < word.length();i++){ if (board[r+i][c+i] != '-' && board[r+i][c+i] != word.charAt(i)) return false; } for (int i = 0;i < word.length();i++){ board[r+i][c+i] = word.charAt((word.length() - 1) - i); } return true; } return false; } public boolean AddWordDr(int r,int c,String word){ if (board[r].length >= r + word.length() && c >= word.length()){ for (int i = 0;i < word.length();i++){ if (board[r+i][c-i] != '-' && board[r+i][c-i] != word.charAt(i)) return false; } for (int i = 0;i < word.length();i++){ board[r+i][c-i] = word.charAt(i); } return true; } return false; } public boolean AddWordDr(int r,int c,String word){ if (board[r].length >= r + word.length() && c >= word.length()){ for (int i = 0;i < word.length();i++){ if (board[r+i][c-i] != '-' && board[r+i][c-i] != word.charAt(i)) return false; } for (int i = 0;i < word.length();i++){ board[r+i][c-i] = word.charAt((word.length() - 1) - i); } return true; } return false; } public void randoFill(){ for (int i = 0;i <board.length();i++){ for (int j = 0;j < board[i].length();j++){ if (board[r+i][c-i] != '-'){ } }