-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMinesweeperHints2.java
38 lines (28 loc) · 1.28 KB
/
MinesweeperHints2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package no.dervis.minesweeper;
import java.util.function.BiPredicate;
public class MinesweeperHints2 {
public static StringBuilder calc(StringBuilder field, int rows, int columns) {
for (int i = 0; i < rows * columns; i++) {
int mines = 0, row = i / columns, column = i % columns;
int[][] dimensions = new int[][] {
{row - 1, column},
{row, column - 1},
{row, column + 1},
{row + 1 , column},
{row - 1 , column - 1},
{row + 1 , column + 1},
{row + 1 , column - 1},
{row - 1 , column + 1}
};
for (int[] dimension : dimensions) {
if (isAMine(dimension, rows, columns, field)) mines++;
}
if (field.charAt(i) != '*') field.setCharAt(i, Character.forDigit(mines, 10));
}
return new StringBuilder(field.toString());
}
private static boolean isAMine(int[] dimention, int rows, int columns, StringBuilder field) {
BiPredicate<Integer, Integer> p = (k, j) -> k >= 0 && k < j;
return p.test(dimention[0], rows) && p.test(dimention[1], columns) && field.charAt(columns * dimention[0] + dimention[1]) == '*';
}
}