func gameOfLife(board [][]int) {
/*
00 0
01 1
10 2
11 3
*/
n := len(board)
m := len(board[0])
cnt := 0
curX,curY := 0,0
dx := [8]int{-1,-1,0,1,1,1,0,-1}
dy := [8]int{0, 1, 1,1,0,-1,-1,-1}
for i:=0;i<n;i++ {
for j:=0;j<m;j++ {
cnt = 0
for k:=0;k<8;k++ {
curX = i+dx[k]
curY = j+dy[k]
if curX >=0 && curX <n && curY>=0 && curY<m && board[curX][curY] & 1 == 1 {
cnt++
}
}
if board[i][j] & 1 == 1 {
if cnt == 2 || cnt==3 {
board[i][j] = 3
}
} else {
if cnt == 3 {
board[i][j] = 2
}
}
}
}
for i := 0;i<n;i++ {
for j:=0;j<m;j++ {
board[i][j] >>= 1
}
}
}
func gameOfLifeV0(board [][]int) {
n := len(board)
m := len(board[0])
ret := make([][]int,n)
for i:=0;i<n;i++ {
ret[i] = make([]int,m)
}
dx := [8]int{-1,-1,0,1,1,1,0,-1}
dy := [8]int{0, 1, 1,1,0,-1,-1,-1}
for i:=0;i<n;i++ {
for j:=0;j<m;j++ {
cnt := 0
for k:=0;k<8;k++ {
curX := i+dx[k]
curY := j+dy[k]
if curX >=0 && curX <n && curY>=0 && curY<m && board[curX][curY] & 1 == 1 {
cnt++
}
}
if board[i][j] & 1 == 1 {
if cnt == 2 || cnt==3 {
ret[i][j] = 1
}
} else {
if cnt == 3 {
ret[i][j] = 1
}
}
}
}
for i := 0;i<n;i++ {
for j:=0;j<m;j++ {
board[i][j] = ret[i][j]
}
}
}
网友评论