| @@ -0,0 +1,26 @@ | |||
| def enhance(pos, cache={}): | |||
| seq = tuple(image.get(pos + d, infinity) for d in D9) | |||
| key = infinity, seq | |||
| if key not in cache: | |||
| cache[key] = alg[int(''.join({'.':'0', '#':'1'}[x] for x in seq), 2)] | |||
| return cache[key] | |||
| text = open(0).read() | |||
| alg, text = text.split('\n\n') | |||
| D9 = [dx + dy for dy in [-1j, 0, 1j] for dx in [-1, 0, 1]] | |||
| image = {} | |||
| for y, line in enumerate(text.splitlines()): | |||
| for x, char in enumerate(line): | |||
| image[complex(x, y)] = char | |||
| X, Y = x, y | |||
| for i in range(1, 50 + 1): | |||
| infinity = '#.'[i % 2] | |||
| image = {(x + y * 1j): enhance(x + y * 1j) | |||
| for x in range(0 - 2 * i, X + 2 * i) | |||
| for y in range(0 - 2 * i, Y + 2 * i) | |||
| } | |||
| if i in {2, 50}: | |||
| print(sum(v == '#' for v in image.values())) | |||