game of life

2023-07-21  本文已影响0人  robertzhai
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]
        }
    }

}

上一篇 下一篇

猜你喜欢

热点阅读