diff --git a/2020/17/17.py b/2020/17/17.py new file mode 100644 index 0000000..d97778b --- /dev/null +++ b/2020/17/17.py @@ -0,0 +1,36 @@ +def main(d): + # create a set of tuples + seed = open('input.txt').read().split('\n') + state = set( + (d - 2) * (0,) + (i, j) # zero-pad coords + for i, row in enumerate(seed) + for j, cell in enumerate(row) + if cell == '#' + ) + + # generate all tuples -1..1 in all dimensions + neighbors = [()] # list contains empty tuple which will be iterated over + for _ in range(d): + neighbors = [ + t + (x,) + for x in [-1, 0, 1] + for t in neighbors + ] + neighbors.remove(d * (0,)) # this is the center cell + + # do 6 iterations according to rules + from collections import Counter + for _ in range(6): + state = set( + t + for t, count in Counter( # unpack the tuple and its count of neighboring active cells + tuple(map(sum, zip(t, n))) # add neighbors kernel to each active cell + for t in state + for n in neighbors + ).items() + if count == 3 or t in state and count == 2 + ) + + return len(state) + +print(main(3), main(4)) \ No newline at end of file diff --git a/2020/17/input.txt b/2020/17/input.txt new file mode 100644 index 0000000..32ecb87 --- /dev/null +++ b/2020/17/input.txt @@ -0,0 +1,8 @@ +......## +####.#.. +.##....# +.##.#..# +........ +.#.#.### +#.##.... +####.#.. \ No newline at end of file