5. Celulárny automat

from pygame import *

WIDTH = 600
HEIGHT = 800
WHITE = Color(255, 255, 255)
BLACK = Color(0, 0, 0)

def rules(a, b, c):
    ruleset = 90
    a = (a & 1) << 2
    b = (b & 1) << 1
    c = (c & 1)
    return (ruleset >> (a | b | c)) & 1

w = 10

cells = []
for i in range(WIDTH // w):
    cells.append(0)
cells[len(cells) // 2] = 1

screen = display.set_mode((WIDTH, HEIGHT))
screen.fill(WHITE)
while True:
    # print(cells)
    # Všetko skopírujem o jeden riadok vyššie
    scroll = Surface([WIDTH, HEIGHT - w])
    scroll.blit(screen, (0, 0), (0, w, WIDTH, HEIGHT))
    screen.fill(WHITE)
    screen.blit(scroll, (0, 0))

    # Pridám spodný riadok
    for i in range(len(cells)):
        color = BLACK if cells[i] == 1 else WHITE
        draw.rect(screen, color, (i * w, HEIGHT - w, w, w))

    nextgen = []
    for i in range(len(cells)):
        x = rules(cells[(i-1) % len(cells)], cells[i], cells[(i+1) % len(cells)])
        nextgen.append(x)

    cells = nextgen
    display.update()
    time.delay(30)