Hello, I tried many of variants, but no one did pass the verification.
I have "more mathes" than needed, but why they don`t needed?
I did try do this task with 8 directions, but lost structer and return to 4 directions(beacuse we go from left top corner string by string to rigth bottom corner).
My general problem, i can't understand why i shouldn't show "aa" pairs like below:
aa - (4, 5) - (4, 6) ---- stay after
aa - (4, 6) - (4, 5) ---- stay after
aa - (5, 5) - (4, 6) ---- stay after
aa - (4, 6) - (5, 5) ---- stay after
aa - (4, 6) - (5, 6) ---- stay after
aa - (4, 6) - (4, 7) ---- stay after
aa - (4, 6) - (5, 7) ---- stay after
aa - (5, 6) - (4, 6) ---- stay after
aa - (4, 7) - (4, 6) ---- stay after
aa - (5, 7) - (4, 6) ---- stay after
package com.codegym.task.task20.task2027;
import java.util.ArrayList;
import java.util.List;
/*
Word search
*/
public class Solution {
public static void main(String[] args) {
int[][] wordSearch = new int[][]{
//0 1 2 3 4 5 6
{'f', 'd', 'e', 'r', 'l', 'k', 'x'},// 0
{'u', 's', 'a', 'm', 'e', 'o', 'd'},// 1
{'l', 'n', 'g', 'r', 'o', 'v', 'z'},// 2
{'m', 'l', 'p', 'r', 'r', 'h', 'w'},// 3
{'p', 'o', 'e', 'e', 'a', 'a', 'c'},// 4
{'u', 's', 'a', 'm', 'a', 'a', 'd'},// 5
{'l', 'n', 'g', 'r', 'a', 'a', 'z'},// 6
{'m', 'l', 'p', 'r', 'a', 'a', 'w'},// 7
{'p', 'o', 'e', 'q', 's', 'a', 'c'},// 8
{'f', 'd', 'e', 'r', 'a', 'a', 'x'}// 9
};
List<Word> r = detectAllWords(wordSearch, "aa");
System.out.println(r.size());
String[] arr = new String[]{
"aa - (4, 4) - (5, 4)",
"aa - (4, 4) - (5, 4)",
"aa - (4, 4) - (4, 5)",
"aa - (4, 4) - (5, 5)",
"aa - (5, 4) - (4, 4)",
"aa - (5, 4) - (5, 5)",
"aa - (5, 4) - (4, 5)",
"aa - (4, 5) - (5, 5)",
"aa - (4, 5) - (4, 4)",
"aa - (4, 5) - (5, 4)",
"aa - (4, 5) - (5, 6)",
"aa - (5, 5) - (4, 5)",
"aa - (5, 5) - (5, 4)",
"aa - (5, 5) - (5, 6)",
"aa - (5, 5) - (4, 4)",
"aa - (5, 6) - (5, 5)",
"aa - (5, 6) - (5, 7)",
"aa - (5, 6) - (4, 5)",
"aa - (5, 6) - (4, 7)",
"aa - (4, 7) - (5, 7)",
"aa - (4, 7) - (5, 6)",
"aa - (4, 7) - (5, 8)",
"aa - (5, 7) - (4, 7)",
"aa - (5, 7) - (5, 6)",
"aa - (5, 7) - (5, 8)",
"aa - (5, 8) - (5, 7)",
"aa - (5, 8) - (5, 9)",
"aa - (5, 8) - (4, 7)",
"aa - (5, 8) - (4, 9)",
"aa - (4, 9) - (5, 9)",
"aa - (4, 9) - (5, 8)",
"aa - (5, 9) - (4, 9)",
"aa - (5, 9) - (5, 8)"};
System.out.println(arr.length + " - length");
int inde = 0;
ArrayList<Word> tr = new ArrayList<>();
for(Word er : r){
String str = er.toString();
int ch = 0;
for(int i = 0; i < arr.length; i++){
if(arr[i] == str || arr[i].equals(str)){
System.out.println(arr[i] + " - arr; er - " + str);
arr[i] = "";
ch = 1;
}
}
if(ch != 1){
tr.add(er);
}
inde++;
}
for(int i = 0; i < arr.length; i++){
if(arr[i] != "") {
System.out.println(arr[i] + " -- this is what stay");
}
}
for(Word rt : tr){
System.out.println(rt + " ---- stay after");
}
}
/*
Expected result
home - (5, 3) - (2, 0)
same - (1, 1) - (4, 1)
*/
public static List<Word> detectAllWords(int[][] wordSearch, String... words) {
List<Word> arr = new ArrayList<Word>();
for(int i = 0; i < words.length; i++){
arr.addAll((findWordInGrid(wordSearch, words[i])));
}
for(Word s : arr){
//System.out.println(s);
}
return arr;
}
public static List<Word> findWordInGrid(int[][] grid, String word){
StringBuilder rev = new StringBuilder();
ArrayList<Word> bet = new ArrayList<>();
rev.append(word);
rev.reverse();
String rever = rev + "";
String text = "";
int startX = 0;
int startY = 0;
int endX = 0;
int endY = 0;
for(int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
int check = 0;
if ((word.charAt(0)) == (grid[i][j]) || (rever.charAt(0)) == (grid[i][j])) {
//if(i == 8 && j == 5){
// System.out.println("For check");
// }
int hor = 0;
int hor1 = 0;
int rDig = 0;
int rDig1 = 0;
int ver = 0;
int ver1 = 0;
int lDig = 0;
int lDig1 = 0;
//int rRdig = 0;
//int rRdig1 = 0;
//int lLdig = 0;
//int lLdig1 = 0;
//int hHor = 0;
//int hHor1 = 0;
//int vVer = 0;
//int vVer1 = 0;
if (grid[i].length >= word.length() + j && grid.length >= word.length() + i) {
for (int t = 0; t < word.length(); t++) {
hor = grid[i][j + t] == word.charAt(t) ? ++hor : 0;
hor1 = grid[i][j + t] == rever.charAt(t) ? ++hor1 : 0;
rDig = grid[i + t][j + t] == word.charAt(t) ? ++rDig : 0;
rDig1 = grid[i + t][j + t] == rever.charAt(t) ? ++rDig1 : 0;
ver = grid[i + t][j] == word.charAt(t) ? ++ver : 0;
ver1 = grid[i + t][j] == rever.charAt(t) ? ++ver1 : 0;
}
}
if (i + 1 >= word.length() && grid[i].length >= word.length() + j) {
hor = hor != 0 ? 0 : hor;
hor1 = hor1 != 0 ? 0 : hor1;
for (int t = 0; t < word.length(); t++) {
hor = grid[i][j + t] == word.charAt(t) ? ++hor : 0;
hor1 = grid[i][j + t] == rever.charAt(t) ? ++hor1 : 0;
// vVer = grid[i - t][j] == word.charAt(t) ? ++vVer : 0;
// vVer1 = grid[i - t][j] == rever.charAt(t) ? ++vVer1 : 0;
// rRdig = grid[i - t][j + t] == word.charAt(t) ? ++rRdig : 0;
// rRdig1 = grid[i - t][j + t] == rever.charAt(t) ? ++rRdig1 : 0;
}
}
/*
if (i + 1 >= word.length() && j + 1 >= word.length()) {
vVer = vVer != 0 ? 0 : vVer;
vVer1 = vVer1 != 0 ? 0 : vVer1;
for (int t = 0; t < word.length(); t++) {
vVer = grid[i - t][j] == word.charAt(t) ? ++vVer : 0;
vVer1 = grid[i - t][j] == rever.charAt(t) ? ++vVer1 : 0;
hHor = grid[i][j - t] == word.charAt(t) ? ++hHor : 0;
hHor1 = grid[i][j - t] == rever.charAt(t) ? ++hHor1 : 0;
lLdig = grid[i - t][j - t] == word.charAt(t) ? ++lLdig : 0;
lLdig1 = grid[i - t][j - t] == rever.charAt(t) ? ++lLdig1 : 0;
}
}
*/
if (j + 1 >= word.length() && grid.length >= word.length() + i) {
//hHor = hHor != 0 ? 0 : hHor;
//hHor1 = hHor1 != 0 ? 0 : hHor1;
ver = ver != 0 ? 0 : ver;
ver1 = ver1 != 0 ? 0 : ver1;
for (int t = 0; t < word.length(); t++) {
// hHor = grid[i][j - t] == word.charAt(t) ? ++hHor : 0;
// hHor1 = grid[i][j - t] == rever.charAt(t) ? ++hHor1 : 0;
lDig = grid[i + t][j - t] == word.charAt(t) ? ++lDig : 0;
lDig1 = grid[i + t][j - t] == rever.charAt(t) ? ++lDig1 : 0;
ver = grid[i + t][j] == word.charAt(t) ? ++ver : 0;
ver1 = grid[i + t][j] == rever.charAt(t) ? ++ver1 : 0;
}
}
if ((hor == word.length() || lDig == word.length() || rDig == word.length() || ver == word.length()/*||
lLdig == word.length()
|| vVer == word.length() || rRdig == word.length() || hHor == word.length()*/)) {
text = word;
startY = i;
startX = j;
if (hor == word.length()) {
endY = i;
endX = j + word.length() - 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (ver == word.length()) {
endY = i + word.length() - 1;
endX = j;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (rDig == word.length()) {
endY = i + word.length() - 1;
endX = j + word.length() - 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (lDig == word.length()) {
endY = i + word.length() - 1;
endX = j - word.length() + 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
/*
if (lLdig == word.length()) {
endY = i - word.length() + 1;
endX = j - word.length() + 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (rRdig == word.length()) {
endY = i - word.length() + 1;
endX = j + word.length() - 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (hHor == word.length()) {
endY = i;
endX = j - word.length() + 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (vVer == word.length()) {
endY = i - word.length() + 1;
endX = j;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
*/
}
if ((hor1 == word.length() || lDig1 == word.length() || rDig1 == word.length() || ver1 == word.length()/* ||
lLdig1 == word.length() || rRdig1 == word.length() || hHor1 == word.length() || vVer1 == word.length()*/)) {
text = word;
endY = i;
endX = j;
if (hor1 == word.length()) {
startY = i;
startX = j + word.length() - 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (ver1 == word.length()) {
startY = i + word.length() - 1;
startX = j;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (rDig1 == word.length()) {
startY = i + word.length() - 1;
startX = j + word.length() - 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (lDig1 == word.length()) {
startY = i + word.length() - 1;
startX = j - word.length() + 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
}
/*
if (lLdig1 == word.length() && lDig1 != word.length() && lDig != word.length()) {
startY = i - word.length() + 1;
startX = j - word.length() + 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (rRdig1 == word.length() && rDig1 != word.length() && rDig != word.length()) {
startY = i - word.length() + 1;
startX = j + word.length() - 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (hHor1 == word.length() && hor1 != word.length() && hor != word.length()) {
startY = i;
startX = j - word.length() + 1;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
if (vVer1 == word.length() && ver1 != word.length() && ver != word.length()) {
startY = i - word.length() + 1;
startX = j;
Word ter = new Word(text);
ter.setEndPoint(endX, endY);
ter.setStartPoint(startX, startY);
bet.add(ter);
}
*/
}
text = "";
}
}
return bet;
}
public static class Word {
private String text;
private int startX;
private int startY;
private int endX;
private int endY;
public Word(String text) {
this.text = text;
}
public void setStartPoint(int i, int j) {
startX = i;
startY = j;
}
public void setEndPoint(int i, int j) {
endX = i;
endY = j;
}
@Override
public String toString() {
return String.format("%s - (%d, %d) - (%d, %d)", text, startX, startY, endX, endY);
}
}
}