let n_iter = 32 let cells = 16 let board_a: [16][16]U8 let board_b: [16][16]U8 ; Storing pointers to the front/backbuffer to avoid copying the board over. let front = @board_a let back = @board_b ; Initialize glider set front[5][2] = 1 set front[6][3] = 1 set front[4][4] = 1 set front[5][4] = 1 set front[6][4] = 1 fun print_board(board: @[16][16]U8) { for let j = 0 , j < cells , set j += 1 { for let i = 0 , i < cells , set i += 1 { if board[i][j] == 1 print("■ ") else print("· ") } println("") } println("") } fun update_board() { for let j = 0 , j < cells , set j += 1 { for let i = 0 , i < cells , set i += 1 { let left = if i > 0 front[i - 1][j + 0] else 0 let right = if i < cells front[i + 1][j + 0] else 0 let top = if j > 0 front[i + 0][j - 1] else 0 let topleft = if i > 0 and j > 0 front[i - 1][j - 1] else 0 let topright = if i < cells and j > 0 front[i + 1][j - 1] else 0 let bot = if j < cells front[i + 0][j + 1] else 0 let botleft = if i > 0 and j < cells front[i - 1][j + 1] else 0 let botright = if i < cells and j < cells front[i + 1][j + 1] else 0 let n = left + right + top + bot + topleft + topright + botleft + botright cond { front[i][j] == 0 and n == 3 = set back[i][j] = 1 front[i][j] == 1 and (n == 2 or n == 3) = set back[i][j] = 1 else = set back[i][j] = 0 } } } let tmp = front set front = back set back = tmp } for let i = 0 , i < n_iter , set i += 1 { print_board(front) update_board() }