lc-go/solutions/2/q289/solution.go
2026-01-15 14:57:22 +09:00

41 lines
785 B
Go

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