# Let's have some fun with Rule 110: # https://en.wikipedia.org/wiki/Rule_110 import turtle import random # enumerate next state for Rule 110 ca_rule = [0, 1, 1, 1, 0, 1, 1, 0] # Note we can use the same encoding trick for all 1D CAs. # For example, for Rule 54 we can have: # ca_rule = [0, 1, 1, 0, 1, 1, 0, 0] def next_state(state): n = [] j = len(state) for i in range(j): # Let's assume that the two edges of the list are connected left = i - 1 right = i + 1 if i < j - 1 else 0 n.append(ca_rule[4 * state[left] + 2 * state[i] + state[right]]) return n game_len = 120 x_pos = -100 y_pos = 200 window = turtle.Screen() window.bgcolor('light gray') pen = turtle.Turtle() pen.speed(20) pen.color('dark blue') pen.pensize(2) pen.shape('classic') # create a random starting state curr_state = [ random.choice([1, 0]) for x in range(game_len) ] for g in range(game_len): pen.penup() pen.setx(x_pos) pen.sety(y_pos) for c in curr_state: if c == 1: pen.pendown() else: pen.penup() pen.forward(3) curr_state = next_state(curr_state) y_pos -= 3