package com.interview.flag.g;
import com.interview.utils.ConsoleWriter;
/**
* Created_By: stefanie
* Date: 15-1-26
* Time: 下午2:46
*/
public class G30_GameOfLife {
public boolean[][] nextState(boolean[][] grid){
boolean[][] next = new boolean[grid.length][grid[0].length];
for(int i = 0; i < grid.length; i++){
for(int j = 0; j < grid[0].length; j++){
int count = countNeighbors(grid, i, j);
if(count <= 1 || count >= 4) next[i][j] = false; //will die
else if(count == 3) next[i][j] = true; //will recovery
else if(count == 2) next[i][j] = grid[i][j]; //will be stable
}
}
return next;
}
private int countNeighbors(boolean[][] grid, int row, int col){
int count = 0;
for(int i = -1; i <= 1; i++){
int nextRow = row + i;
if(nextRow < 0 || nextRow >= grid.length) continue;
for(int j = -1; j <= 1; j++){
if(i == 0 && j == 0) continue;
int nextCol = col + j;
if(nextCol < 0 || nextCol >= grid[0].length) continue;
if(grid[nextRow][nextCol]) count++;
}
}
return count;
}
public static void main(String[] args){
G30_GameOfLife game = new G30_GameOfLife();
boolean[][] grid = new boolean[][]{
{true, false, true, true},
{true, true, false, true},
{false, false, true, false}
};
grid = game.nextState(grid);
for(int i = 0; i < grid.length; i++) ConsoleWriter.printBooleanArray(grid[i]);
// {true, false, true, true},
// {true, false, false, true},
// {false, true, true, false}
grid = game.nextState(grid);
for(int i = 0; i < grid.length; i++) ConsoleWriter.printBooleanArray(grid[i]);
// false true true true
// true false false true
// false true true false
grid = game.nextState(grid);
for(int i = 0; i < grid.length; i++) ConsoleWriter.printBooleanArray(grid[i]);
// false true true true
// true false false true
// false true true false
//in a stable status.
}
}