add new solutions
This commit is contained in:
parent
0c73608ce5
commit
d798d5e8c9
19 changed files with 661 additions and 4 deletions
41
solutions/2/q289/solution.go
Normal file
41
solutions/2/q289/solution.go
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue