import numpy as np def apply_rule(grid): new_grid = np.copy(grid) size = grid.shape[0] for i in range(size - 1): for j in range(size - 1): square = grid[i:i+2, j:j+2] ones = np.argwhere(square == 1) if len(ones) == 2: if abs(ones[0][0] - ones[1][0]) == 1 and abs(ones[0][1] - ones[1][1]) == 1: new_grid[i:i+2, j:j+2] = 1 - square return new_grid def get_img() -> np.ndarray: out = np.zeros((100, 100), dtype=np.int32) for i in range(0, 100): if i % 2: out[i, 0] = 1 else: out[i,:99] = 1 out[0, 0] = 0 out[0, 99] = 1 return out def print_grid(grid: np.ndarray): for i in range(100): for j in range(100): print(grid[i, j], end="") print() def get_num_of_steps(grid: np.ndarray): seen_states = set() grid_bytes = grid.tobytes() i = 0 while grid_bytes not in seen_states and i < 10000: seen_states.add(grid_bytes) grid = apply_rule(grid) grid_bytes = grid.tobytes() i += 1 return i if __name__ == "__main__": out = get_img() # steps = get_num_of_steps(out) # print("Num of steps: ", steps) print_grid(out)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import numpy as np def apply_rule(grid): new_grid = np.copy(grid) size = grid.shape[0] for i in range(size - 1): for j in range(size - 1): square = grid[i:i+2, j:j+2] ones = np.argwhere(square == 1) if len(ones) == 2: if abs(ones[0][0] - ones[1][0]) == 1 and abs(ones[0][1] - ones[1][1]) == 1: new_grid[i:i+2, j:j+2] = 1 - square return new_grid def get_img() -> np.ndarray: out = np.zeros((100, 100), dtype=np.int32) for i in range(0, 100): if i % 2: out[i, 0] = 1 else: out[i,:99] = 1 out[0, 0] = 0 out[0, 99] = 1 return out def print_grid(grid: np.ndarray): for i in range(100): for j in range(100): print(grid[i, j], end="") print() def get_num_of_steps(grid: np.ndarray): seen_states = set() grid_bytes = grid.tobytes() i = 0 while grid_bytes not in seen_states and i < 10000: seen_states.add(grid_bytes) grid = apply_rule(grid) grid_bytes = grid.tobytes() i += 1 return i if __name__ == "__main__": out = get_img() # steps = get_num_of_steps(out) # print("Num of steps: ", steps) print_grid(out) |