1234567891011121314151617181920212223242526 |
- 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
- }
- }
- }
|