◂ 18 décembre 2015 ▸
Like a GIF For Your Yard :
- 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)]))