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 boolean addWordHR(int row, int col, String word) {
if (word.length()>board[row].length-col)
return false;
for (int i = 0;i<word.length();i++) {
if (!(board[row][col+i]=="-".charAt(0) || board[row][col+i]==word.charAt(i)))
return false;
}
for (int i = 0; i < word.length(); i ++){
board[row][col+i]= word.charAt(i);
}
return true;
}
public boolean addWordHL(int row, int col, String word) {
if (word.length()> col + 1)
return false;
for (int i = 0;i<word.length();i++) {
if (!(board[row][col-i]=="-".charAt(0) || board[row][col-i]==word.charAt(i)))
return false;
}
for (int i = 0; i < word.length(); i ++){
board[row][col-i]= word.charAt(i);
}
return true;
}
public boolean addWordVU(int row, int col, String word) {
if (word.length() > row + 1)
return false;
for (int i = 0;i<word.length();i++) {
if (!(board[row-i][col]=="-".charAt(0) || board[row-i][col]==word.charAt(i)))
return false;
}
for (int i = 0; i < word.length(); i ++){
board[row-i][col]= word.charAt(i);
}
return true;
}
public boolean addWordVD(int row, int col, String word) {
if (board.length - word.length()+ 1 + row <0)
return false;
for (int i = 0;i<word.length();i++) {
if (!(board[row+i][col]=="-".charAt(0) || board[row+i][col]==word.charAt(i)))
return false;
}
for (int i = 0; i < word.length(); i ++){
board[row+i][col]= word.charAt(i);
}
return true;
}
public boolean addWordNE(int row, int col, String word){
if (row + 1 - word.length()< 0 || word.length()>board[row].length-col)
return false;
for (int i = 0; i < word.length(); i ++){
if (!(board[row-i][col+i]=="-".charAt(0))||board[row-i][col+i]== word.charAt(i))
return false;
}
for (int i = 0; i<word.length(); i ++){
board[row-i][col+i]=word.charAt(i);
}
return true;
}
public boolean addWordNW(int row, int col, String word){
if (row + 1 - word.length()< 0 || word.length()>col + 1)
return false;
for (int i = 0; i < word.length(); i ++){
if (!(board[row-i][col-i]=="-".charAt(0))||board[row-i][col-i]== word.charAt(i))
return false;
}
for (int i = 0; i<word.length(); i ++){
board[row-i][col-i]=word.charAt(i);
}
return true;
}
public boolean addWordSE(int row, int col, String word){
if (row + word.length() > board.length || word.length()>board[row].length-col)
return false;
for (int i = 0; i < word.length(); i ++){
if (!(board[row+i][col+i]=="-".charAt(0))||board[row+i][col+i]== word.charAt(i))
return false;
}
for (int i = 0; i<word.length(); i ++){
board[row+i][col+i]=word.charAt(i);
}
return true;
}
public boolean addWordSW(int row, int col, String word){
if (row + word.length()> board.length || col + 1 - word.length()<0)
return false;
for (int i = 0; i < word.length(); i ++){
if (!(board[row+i][col-i]=="-".charAt(0))||board[row+i][col-i]== word.charAt(i))
return false;
}
for (int i = 0; i<word.length(); i ++){
board[row+i][col-i]=word.charAt(i);
}
return true;
}
public void fill(){
String alphabet = "abcdefghijklmnopqrstuvwxyz";
Random r = new Random();
for (int i = 0; i < board.length;i++){
for (int j = 0; j < board[i].length;j++){
if (board[i][j] == "-".charAt(0)){
board[i][j]= alphabet.charAt(r.nextInt(26));
}
}
}
}
}