Uitwerking extra

Deze pagina bevat uitvoerbare code.
def copy_board(board):
    """Geeft een kopie van het bord terug met voor elke rij een nieuwe lijst."""
    result = []
    for row in board:
        result = result + [row[:]]
    return result


def count_neighbors(board, row, col):
    """Geeft het aantal levende buren van de cel op rij row en kolom col."""
    count = 0
    for i in range(max(0, row - 1), min(len(board), row + 2)):
        for j in range(max(0, col - 1), min(len(board[0]), col + 2)):
            if i != row or j != col:
                count = count + board[i][j]
    return count


def next_cell(board, row, col):
    """Geeft de waarde van de cel op rij row en kolom col in de volgende generatie."""
    neighbors = count_neighbors(board, row, col)
    if neighbors == 3:
        return 1
    if board[row][col] == 1 and neighbors == 2:
        return 1
    return 0


def next_generation(board):
    """Geeft de volgende generatie van het bord terug; board zelf blijft ongewijzigd."""
    result = copy_board(board)
    for r in range(len(board)):
        for c in range(len(board[0])):
            result[r][c] = next_cell(board, r, c)
    return result


bord = [
    [0, 0, 0, 0, 0],
    [0, 0, 1, 0, 0],
    [0, 0, 1, 0, 0],
    [0, 0, 1, 0, 0],
    [0, 0, 0, 0, 0],
]
origineel = copy_board(bord)
assert count_neighbors([[1, 1, 0], [0, 0, 1], [0, 0, 0]], 0, 0) == 1
assert next_generation(bord) == [
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 1, 1, 1, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
]
assert bord == origineel