Skip to content

Commit 8255048

Browse files
committed
WordSearch: reduce code duplication, add 1 test
Adjust timeout for AddMultithreadingTest
1 parent 4b2e128 commit 8255048

File tree

3 files changed

+38
-38
lines changed

3 files changed

+38
-38
lines changed

src/main/java/by/andd3dfx/search/WordSearch.java

Lines changed: 25 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public boolean exist(char[][] board, String word) {
4040

4141
for (int i = 0; i < m; i++) {
4242
for (int j = 0; j < n; j++) {
43-
if (word.charAt(0) == board[i][j]) {
43+
if (checkIsCharacterSuitable(board, i, j, word, 0)) {
4444
boolean[][] visited = new boolean[m][n];
4545
visited[i][j] = true;
4646

@@ -58,50 +58,38 @@ private boolean findNextCharacter(char[][] board, int i, int j, String word, int
5858
return true;
5959
}
6060

61-
var m = board.length;
62-
var n = board[0].length;
61+
if (checkNewPos(board, i - 1, j, word, pos, visited)) {
62+
return true;
63+
}
64+
if (checkNewPos(board, i, j - 1, word, pos, visited)) {
65+
return true;
66+
}
67+
if (checkNewPos(board, i + 1, j, word, pos, visited)) {
68+
return true;
69+
}
70+
if (checkNewPos(board, i, j + 1, word, pos, visited)) {
71+
return true;
72+
}
6373

64-
if (i > 0 && !visited[i - 1][j]) {
65-
if (checkIsCharacterSuitable(board, i - 1, j, word, pos)) {
66-
visited[i - 1][j] = true;
67-
if (findNextCharacter(board, i - 1, j, word, pos + 1, visited)) {
68-
return true;
69-
}
74+
return false;
75+
}
7076

71-
visited[i - 1][j] = false;
72-
}
73-
}
74-
if (j > 0 && !visited[i][j - 1]) {
75-
if (checkIsCharacterSuitable(board, i, j - 1, word, pos)) {
76-
visited[i][j - 1] = true;
77-
if (findNextCharacter(board, i, j - 1, word, pos + 1, visited)) {
78-
return true;
79-
}
77+
private boolean checkNewPos(char[][] board, int i, int j, String word, int pos, boolean[][] visited) {
78+
var m = board.length;
79+
var n = board[0].length;
8080

81-
visited[i][j - 1] = false;
82-
}
81+
if (i < 0 || j < 0 || i >= m || j >= n) {
82+
return false;
8383
}
84-
if (i < m - 1 && !visited[i + 1][j]) {
85-
if (checkIsCharacterSuitable(board, i + 1, j, word, pos)) {
86-
visited[i + 1][j] = true;
87-
if (findNextCharacter(board, i + 1, j, word, pos + 1, visited)) {
88-
return true;
89-
}
9084

91-
visited[i + 1][j] = false;
85+
if (!visited[i][j] && checkIsCharacterSuitable(board, i, j, word, pos)) {
86+
visited[i][j] = true;
87+
if (findNextCharacter(board, i, j, word, pos + 1, visited)) {
88+
return true;
9289
}
93-
}
94-
if (j < n - 1 && !visited[i][j + 1]) {
95-
if (checkIsCharacterSuitable(board, i, j + 1, word, pos)) {
96-
visited[i][j + 1] = true;
97-
if (findNextCharacter(board, i, j + 1, word, pos + 1, visited)) {
98-
return true;
99-
}
10090

101-
visited[i][j + 1] = false;
102-
}
91+
visited[i][j] = false;
10392
}
104-
10593
return false;
10694
}
10795

src/test/java/by/andd3dfx/multithreading/AddMultithreadingTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void checkMultithreadingPresence() throws ExecutionException, Interrupted
3737

3838
var future = CompletableFuture.supplyAsync(() -> aggregator.doRequest());
3939

40-
await().atMost(1_100, TimeUnit.MILLISECONDS)
40+
await().atMost(1_200, TimeUnit.MILLISECONDS)
4141
.until(() -> future.isDone());
4242
assertThat(future.get()).isEqualTo("OneTwo");
4343
}

src/test/java/by/andd3dfx/search/WordSearchTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,16 @@ public void exist_checkConnectivity() {
8989

9090
assertFalse(wordSearch.exist(board, word));
9191
}
92+
93+
@Test
94+
public void exist_allCharsUsed() {
95+
char[][] board = new char[][]{
96+
{'A', 'B', 'C', 'E'},
97+
{'S', 'F', 'C', 'S'},
98+
{'A', 'D', 'E', 'E'}
99+
};
100+
var word = "ASABFDECCESE";
101+
102+
assertTrue(wordSearch.exist(board, word));
103+
}
92104
}

0 commit comments

Comments
 (0)