|
|
@@ -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())) |