18.py
1 from lib import * 2 3 input = read_input(2015, 18) 4 5 gol = input.splitlines() 6 7 8 for _ in range(100): 9 gol = [ 10 [ 11 ".#"[ 12 ( 13 cnt := sum( 14 gol[p][q] == "#" 15 for r in range(3) 16 for s in range(3) 17 if (r, s) != (1, 1) and 0 <= (p := i - 1 + r) < len(gol) and 0 <= (q := j - 1 + s) < len(row) 18 ) 19 ) 20 in (2, 3) 21 and x == "#" 22 or x == "." 23 and cnt == 3 24 ] 25 for j, x in enumerate(row) 26 ] 27 for i, row in enumerate(gol) 28 ] 29 30 print(sum(x == "#" for row in gol for x in row)) 31 32 33 gol = list(map(list, input.splitlines())) 34 gol[0][0] = gol[0][-1] = gol[-1][0] = gol[-1][-1] = "#" 35 for _ in range(100): 36 gol = [ 37 [ 38 ".#"[ 39 ( 40 cnt := sum( 41 gol[p][q] == "#" 42 for r in range(3) 43 for s in range(3) 44 if (r, s) != (1, 1) and 0 <= (p := i - 1 + r) < len(gol) and 0 <= (q := j - 1 + s) < len(row) 45 ) 46 ) 47 in (2, 3) 48 and x == "#" 49 or x == "." 50 and cnt == 3 51 ] 52 for j, x in enumerate(row) 53 ] 54 for i, row in enumerate(gol) 55 ] 56 gol[0][0] = gol[0][-1] = gol[-1][0] = gol[-1][-1] = "#" 57 58 59 print(sum(x == "#" for row in gol for x in row))