func gameOfLife(board [][]int) {
m, n := len(board), len(board[0])
xDir := []int{1, 1, 0, -1, -1, -1, 0, 1}
yDir := []int{0, -1, -1, -1, 0, 1, 1, 1}
for y := 0; y < m; y++ {
for x := 0; x < n; x++ {
cnt := 0
for i := 0; i < 8; i++ {
xPos, yPos := x+xDir[i], y+yDir[i]
if 0 <= xPos && xPos < n && 0 <= yPos && yPos < m {
cnt += board[yPos][xPos] & 1
}
}
if cnt == 2 { // Keep current state
board[y][x] |= (board[y][x] & 1) << 1
} else if cnt == 3 { // Live :-)
board[y][x] |= 2
} // Else, die X-(
}
}
for y := 0; y < m; y++ {
for x := 0; x < n; x++ {
board[y][x] >>= 1
}
}
}