package q289 func countLiveNeighbors(board [][]int, row, col int) int { cnt := 0 for r := row - 1; r <= row+1; r++ { for c := col - 1; c <= col+1; c++ { if r == row && c == col || r < 0 || c < 0 || r >= len(board) || c >= len(board[0]) { continue } cnt += board[r][c] & 1 } } return cnt } func gameOfLife(board [][]int) { for r := range board { for c := range board[r] { neighbors := countLiveNeighbors(board, r, c) if board[r][c]&1 == 1 { switch { case neighbors < 2 || neighbors > 3: // die default: board[r][c] |= 2 // survive } } else if neighbors == 3 { board[r][c] |= 2 // birth } } } // Next generation for r := range board { for c := range board[r] { board[r][c] >>= 1 } } } var _ = gameOfLife