Advent of code

 18 décembre 2015 

  Like a GIF For Your Yard :
  1. code.py
f = open("input.txt", 'r')
lines =f.readlines()

W = len(lines[0].strip())

ZEROS_LINE = [(W+2)*[0]]

GRID_INIT = []
for line in lines:
    GRID_INIT.append(list(map(lambda x:x=='#' and 1 or 0, line.strip())))


def addZeroBorder(grid):
    global ZEROS_LINE
    grid = ZEROS_LINE + list(map(lambda line:[0]+line+[0], grid)) + ZEROS_LINE
    return grid

def nextCellStage(grid, numLine, numCol):
    SHIFTS = [-1, 0, 1]
    nb = sum([sum(grid[line][numCol-1:numCol+2]) for line in range(numLine - 1, numLine + 2)])
    if nb == 3 or (nb == 4 and grid[numLine][numCol]):
        return 1
    else:
        return 0

def nextGridStage(grid):
    global PART2
    newGrid = []
    for numLine in range(1, len(grid) - 1):
        newLine = []
        for numCol in range(1, len(grid[0]) - 1):
            newLine.append(nextCellStage(grid, numLine, numCol));
        newGrid.append(newLine)
    if (PART2):
        newGrid[0] [0]  = 1
        newGrid[0] [-1] = 1
        newGrid[-1][0]  = 1
        newGrid[-1][-1] = 1
    return addZeroBorder(newGrid)


for PART2 in [False, True]:
    grid = addZeroBorder(GRID_INIT)
    if (PART2):
        grid[1] [1]  = 1
        grid[1] [-2] = 1
        grid[-2][1]  = 1
        grid[-2][-2] = 1
    for _ in range(100):
        # Oui, PART2 est en variable globale plutôt qu'en paramètre de fonction… mais voilà quoi, flemme :P    
        grid = nextGridStage(grid)

    print(sum([sum(grid[line]) for line in range(1, len(grid) - 1)]))