YAPC::EU 2018 Glasgow Update!
This commit is contained in:
parent
22f33d4004
commit
4e2d22a71d
1170 changed files with 15042 additions and 3047 deletions
92
Task/Conways-Game-of-Life/Java/conways-game-of-life-3.java
Normal file
92
Task/Conways-Game-of-Life/Java/conways-game-of-life-3.java
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
import static java.util.List.of;
|
||||
|
||||
class GameOfLife {
|
||||
|
||||
boolean[][] board = new boolean[3][3];
|
||||
|
||||
GameOfLife() {}
|
||||
|
||||
GameOfLife(String[] board) {
|
||||
set((i, j, s) -> board[i].charAt(j * 2) == '■');
|
||||
}
|
||||
|
||||
void set(Setter setter) {
|
||||
for (int i = 0; i < board.length; i++) {
|
||||
for (int j = 0; j < board[i].length; j++) {
|
||||
board[i][j] = setter.set(i, j, board[i][j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void get(Getter getter) {
|
||||
set((i, j, s) -> {
|
||||
getter.get(i, j, s);
|
||||
return s;
|
||||
});
|
||||
}
|
||||
|
||||
int countNeighbors(int i, int j) {
|
||||
var counter = new Getter() {
|
||||
int count;
|
||||
|
||||
@Override
|
||||
public void get(int li, int lj, boolean state) {
|
||||
if (distance(i, j, li, lj) == 1 && board[li][lj])
|
||||
count++;
|
||||
}
|
||||
};
|
||||
get(counter);
|
||||
return counter.count;
|
||||
}
|
||||
|
||||
int distance(int i, int j, int li, int lj) {
|
||||
return Math.max(
|
||||
Math.abs(i - li),
|
||||
Math.abs(j - lj));
|
||||
}
|
||||
|
||||
GameOfLife makeNextGeneration() {
|
||||
var n = new GameOfLife();
|
||||
n.set((i, j, s) -> {
|
||||
var alive = board[i][j];
|
||||
int c = countNeighbors(i, j);
|
||||
if (alive) {
|
||||
return c == 2 || c == 3;
|
||||
} else {
|
||||
return c == 3;
|
||||
}
|
||||
});
|
||||
return n;
|
||||
}
|
||||
|
||||
void print() {
|
||||
get((i, j, s) -> {
|
||||
if (j == 0)
|
||||
System.out.println();
|
||||
System.out.print(s ? "■ " : "□ ");
|
||||
});
|
||||
}
|
||||
|
||||
interface Setter {
|
||||
boolean set(int i, int j, boolean state);
|
||||
}
|
||||
|
||||
interface Getter {
|
||||
void get(int i, int j, boolean state);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String[] board = {
|
||||
"□ ■ □ ",
|
||||
"□ ■ □ ",
|
||||
"□ ■ □ ",
|
||||
};
|
||||
var gol = new GameOfLife(board);
|
||||
for (var generation : of(0, 1, 2)) {
|
||||
gol.print();
|
||||
System.out.println("\n");
|
||||
gol = gol.makeNextGeneration();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue