package problems.medium;
/**
* Created by sherxon on 1/28/17.
*/
public class GameofLife {
static void gameOfLife(int[][] a) {
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
int al = getAliveN(a, i, j);
if (a[i][j] == 1 && (al < 2 || al > 3))
a[i][j] = -1;
else if (a[i][j] == 0 && al == 3)
a[i][j] = 2;
}
}
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] == -1) a[i][j] = 0;
else if (a[i][j] == 2) a[i][j] = 1;
}
}
}
private static int getAliveN(int[][] a, int i, int j) {
int count = 0;
if (j < a[i].length - 1 && (a[i][j + 1] == 1 || a[i][j + 1] == -1)) count++;
if (j > 0 && (a[i][j - 1] == 1 || a[i][j - 1] == -1)) count++;
if (i > 0 && (a[i - 1][j] == 1 || a[i - 1][j] == -1)) count++;
if (i < a.length - 1 && (a[i + 1][j] == 1 || a[i + 1][j] == -1)) count++;
if (i < a.length - 1 && j < a[i].length - 1 && (a[i + 1][j + 1] == 1 || a[i + 1][j + 1] == -1)) count++;
if (i < a.length - 1 && j > 0 && (a[i + 1][j - 1] == 1 || a[i + 1][j - 1] == -1)) count++;
if (i > 0 && j > 0 && (a[i - 1][j - 1] == 1 || a[i - 1][j - 1] == -1)) count++;
if (i > 0 && j < a[i].length - 1 && (a[i - 1][j + 1] == 1 || a[i - 1][j + 1] == -1)) count++;
return count;
}
}