FIELD_WIDTH := 15; FIELD_HEIGHT := 15; create_empty_field := fn { empty_row := [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; [ empty_row, empty_row, empty_row, empty_row, empty_row, empty_row, empty_row, empty_row, empty_row, empty_row, empty_row, empty_row, empty_row, empty_row, empty_row ] }; field = create_empty_field(); # Place a glider on the field. field[1][2] = 1; field[2][3] = 1; field[3][1] = 1; field[3][2] = 1; field[3][3] = 1; loop { new_field = create_empty_field(); # Compute new field. y = 0; loop if y < FIELD_HEIGHT { x = 0; loop if x < FIELD_WIDTH { top := if y == 0 { 0 } else { field[y - 1][x] }; top_left := if x == 0 || y == 0 { 0 } else { field[y - 1][x - 1] }; top_right := if x == FIELD_WIDTH - 1 || y == 0 { 0 } else { field[y - 1][x + 1] }; bottom := if y == FIELD_HEIGHT - 1 { 0 } else { field[y + 1][x] }; bottom_left := if x == 0 || y == FIELD_HEIGHT - 1 { 0 } else { field[y + 1][x - 1] }; bottom_right := if x == FIELD_WIDTH - 1 || y == FIELD_HEIGHT - 1 { 0 } else { field[y + 1][x + 1] }; left := if x == 0 { 0 } else { field[y][x - 1] }; right := if x == FIELD_WIDTH - 1 { 0 } else { field[y][x + 1] }; neighbors := top + top_left + top_right + bottom + bottom_left + bottom_right + left + right; if field[y][x] == 0 { if neighbors == 3 { new_field[y][x] = 1; }; } elif neighbors == 2 || neighbors == 3 { new_field[y][x] = 1; }; x = x + 1; }; y = y + 1; }; # Print field. y = 0; field_str = ""; loop if y < FIELD_HEIGHT { row = ""; x = 0; loop if x < FIELD_WIDTH { if field[y][x] == 1 { row = row + "#"; } else { row = row + "."; }; x = x + 1; }; field_str = "{field_str}{row}\n"; y = y + 1; }; print field_str; field = new_field; };