|
|
@@ -0,0 +1,28 @@ |
|
|
|
import collections |
|
|
|
import re |
|
|
|
import sys |
|
|
|
|
|
|
|
|
|
|
|
def calc(pos): |
|
|
|
is_black = pos in active |
|
|
|
count = sum(pos + step in active for step in maps.values()) |
|
|
|
if is_black and count not in {1, 2}: |
|
|
|
return False |
|
|
|
elif not is_black and count == 2: |
|
|
|
return True |
|
|
|
return is_black |
|
|
|
|
|
|
|
|
|
|
|
text = sys.stdin.read() |
|
|
|
maps = {'w': 2, 'e': -2, 'nw': 1+1j, 'ne': -1+1j, 'sw': 1-1j, 'se': -1-1j} |
|
|
|
grid = collections.defaultdict(bool) |
|
|
|
for line in text.splitlines(): |
|
|
|
end = sum(map(maps.get, re.findall(r'(se|sw|nw|ne|e|w)', line))) |
|
|
|
grid[end] = not grid[end] |
|
|
|
active = {pos for pos in grid if grid[pos]} |
|
|
|
print(len(active)) |
|
|
|
|
|
|
|
|
|
|
|
for _ in range(100): |
|
|
|
active = {p + s for p in active for s in maps.values() if calc(p + s)} |
|
|
|
print(len(active)) |