Вроде все правильно выдает, но выдает ошибку: Размер списка возвращаемого методом detectAllWords отличается от правильного!
package com.javarush.task.task20.task2027;
import java.util.ArrayList;
import java.util.List;
/*
Кроссворд
*/
public class Solution {
public static void main(String[] args) {
int[][] crossword = new int[][]{
{'f', 'd', 'e', 'r', 'l', 'k'},
{'u', 's', 'a', 'm', 'e', 'o'},
{'l', 'n', 'g', 'r', 'o', 'v'},
{'m', 'l', 'p', 'r', 'r', 'h'},
{'p', 'o', 'e', 'e', 'j', 'j'}
};
detectAllWords(crossword, "home", "same");
/*
Ожидаемый результат
home - (5, 3) - (2, 0)
same - (1, 1) - (4, 1)
*/
}
public static List<Word> detectAllWords(int[][] crossword, String... words) {
int[][] a = new int[crossword[0].length + 2][crossword[1].length + 2];
ArrayList<Word> list = new ArrayList<>();
String s="";
Word w;
for (int i = 0; i < crossword.length; i++)
for (int j = 0; j < crossword[1].length; j++)
a[i + 1][j + 1] = crossword[i][j];
for (String t : words) {
s = t;
w = new Word(t);
for (int i = 0; i < a.length; i++)
for (int j = 0; j < a[1].length; j++)
if(a[i][j] == t.charAt(0)) {
int s1 = i;
int r1 = j;
int [] X = new int[8];
int [] Y = new int[8];
int [] index = new int[8];
int [] b = new int[8];
for (int t1 = 1;t1<s.length();t1++){
if(s1+t1 > 0 & r1+t1 > 0 & s1+t1 < a.length & r1+t1 < a.length & b[0] == 0) //1
if(a[s1+t1][r1+t1] == s.charAt(t1)){
X[0] = s1+t1;Y[0] = r1+t1;
for(int l =0;l<8;l++)
if(b[l] != -1)
b[l] = 1;
b[0] = 0;
index[0] +=1;}
if(s1 > 0 & r1+t1 > 0 & s1 < a.length & r1+t1 < a.length & b[1] == 0) //2
if(a[s1][r1+t1] == s.charAt(t1)){
X[1] = s1;Y[1] = r1+t1;
for(int l =0;l<8;l++)
if(b[l] != -1)
b[l] =1;
b[1] = 0;
index[1] +=1;}
if(s1+t1 > 0 & r1 > 0 & s1+t1 < a.length & r1 < a.length & b[2] == 0) //3
if(a[s1+t1][r1] == s.charAt(t1)){
X[2] = s1+t1;Y[2] = r1;
for(int l =0;l<8;l++)
if(b[l] != -1)
b[l] =1;
b[2] = 0;
index[2] +=1;}
if(s1-t1 > 0 & r1 > 0 & s1-t1 < a.length & r1 < a.length & b[3] == 0) //4
if(a[s1-t1][r1] == s.charAt(t1)){
X[3] = s1-t1;Y[3] = r1;
for(int l =0;l<8;l++){
if(b[l] != -1)
b[l] =1;}
b[3] = 0;
index[3] +=1;}
if(s1 > 0 & r1-t1 > 0 & s1 < a.length & r1-t1 < a.length & b[4] == 0) //5
if(a[s1][r1-t1] == s.charAt(t1)){
X[4] = s1;Y[4] = r1-t1;
for(int l =0;l<8;l++){
if(b[l] != -1)
b[l] =1;}
b[4] = 0;
index[4] +=1;}
if(s1-t1 > 0 & r1-t1 > 0 & s1-t1 < a.length & r1-t1 < a.length & b[5] == 0) //6
if(a[s1-t1][r1-t1] == s.charAt(t1)){
X[5] = s1-t1;Y[5] = r1-t1;
for(int l =0;l<8;l++)
if(b[l] != -1)
b[l] =1;
b[5] = 0;
index[5] +=1;}
if(s1+t1 > 0 & r1-t1 > 0 & s1+t1 < a.length & r1-t1 < a.length & b[6] == 0) //7
if(a[s1+t1][r1-t1] == s.charAt(t1)){
X[6] = s1+t1;Y[6] = r1-t1;
for(int l =0;l<8;l++)
if(b[l] != -1)
b[l] =1;
b[6] = 0;
index[6] +=1;}
if(s1-t1 > 0 & r1+t1 > 0 & s1-t1 < a.length & r1+t1 < a.length & b[7] == 0) //8
if(a[s1-t1][r1+t1] == s.charAt(t1)){
X[7] = s1-t1;Y[7] = r1+t1;
for(int l =0;l<8;l++)
if(b[l] != -1)
b[l] =1;
b[7] = 0;
index[7] +=1;}
else { if(b[0]==-1 & b[1]==-1 &b[2]==-1 &b[3]==-1 &b[4]==-1 &b[5]==-1 & b[6]==-1 & b[7]==-1)
break;
else {
for(int l =0;l<8;l++){
if(b[l] == 0)
b[l] = -1;
if(b[l] == 1)
b[l] = 0 ;}
}
}
}
int max = 0;
int max1 = 0;
for(int p =0;p<index.length;p++) {
if (index[p] > max) {
max = index[p];
max1 = p;
}
}
if(max == s.length()-1){
w.setStartPoint(j-1,i-1);
w.setEndPoint(Y[max1]-1,X[max1]-1);
list.add(w);
}
else continue;
}
}
// System.out.println("size "+list.size());
// System.out.println(list.get(0));
return list;}
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);
}
}
}