Добрый день!
Тесты проходит, выводит все верно, валидатор говорит: "Ты неправильно определил положение граничных букв(ы) слов(а)."
Перечитала все комментарии и обсуждения.
Единственное не стала учитывать, что слово может повторяться несколько раз, т.к. пишут, что в этом нет необходимости.
Может кто подскажет в чем проблема?
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[][]{
{' ', 'd', 'l', 'r', 'o', 'w'},
{' ', 'r', ' ', ' ', 'r', ' '},
{' ', 'o', 'd', ' ', 'd', 'd'},
{'d', 'w', 'o', 'r', 'd', 'r'},
{'r', 'o', ' ', ' ', 'o', 'o'},
{'o', 'r', ' ', ' ', ' ', 'w'},
{'w', 'd', 'r', 'o', 'o', 'w'}
// {'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'}
};
List<Word> list = detectAllWords(crossword, "word");//"jj","home", "same");
for (Word w: list) {
System.out.println(w);
}
/*
Ожидаемый результат
home - (5, 3) - (2, 0)
same - (1, 1) - (4, 1)
*/
}
public static List<Word> detectAllWords(int[][] crossword, String... words) {
List<Word> list = new ArrayList<>();
for (String s :
words) {
Word w1 = new Word(s);
char[] ch = s.toCharArray();
out:
for (int i = 0; i < crossword.length; i++) {
for (int j = 0; j < crossword[i].length; j++) {
out1:
if (crossword[i][j] == ch[0]) {
for (int k = i - 1; k <= i + 1; k++) {
for (int l = j - 1; l <= j + 1; l++) {
if (k == i & l == j) {
continue;
}
try {
if (crossword[k][l] == ch[1]) {
if (ch.length == 2) {
w1.setStartPoint(j, i);
w1.setEndPoint(l, k);
break out;
} else {
int a = k - i;
int b = l - j;
for (int m = 2; m < ch.length; m++) {
k = k + a;
l = l + b;
if (crossword[k][l] == ch[m]) {
if (crossword[k][l] == ch[ch.length - 1]) {
w1.setStartPoint(j, i);
w1.setEndPoint(l, k);
break out;
}
} else
break out1;
}
}
}
} catch (ArrayIndexOutOfBoundsException e) {
}
}
}
}
}
}
list.add(w1);
}
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);
}
}
}