advent-of-code/2024-python/output/day_12.py

89 lines
2.4 KiB
Python
Raw Normal View History

import re
from collections import Counter, defaultdict, deque
from heapq import heappop, heappush
from itertools import chain, combinations, compress, permutations
from output import ADJ, DD, D, ccw, cw, ints, matrix, mdbg, mhd, vdbg
def solve(data):
grid, H, W = matrix(data)
p1 = 0
seen = set()
for r, row in enumerate(grid):
for c, col in enumerate(row):
if (r, c) in seen:
continue
areas = 0
perimeters = 0
q = deque([(r, c)])
while q:
rc = q.popleft()
if rc in seen:
continue
seen.add(rc)
areas += 1
y, x = rc
for dy, dx in D:
if (0 <= y + dy < H and 0 <= x + dx < W) and grid[y + dy][
x + dx
] == col:
q.append((y + dy, x + dx))
else:
perimeters += 1
p1 += areas * perimeters
p2 = None
return p1, p2
if __name__ == "__main__":
import os
# use dummy data
inp = """
RRRRIICCFF
RRRRIICCCF
VVRRRCCFFF
VVRCCCJFFF
VVVVCJJCFE
VVIVCCJJEE
VVIIICJJEE
MIIIIIJJEE
MIIISIJEEE
MMMISSJEEE
""".strip()
"""
A region of R plants with price 12 * 18 = 216.
A region of I plants with price 4 * 8 = 32.
A region of C plants with price 14 * 28 = 392.
A region of F plants with price 10 * 18 = 180.
A region of V plants with price 13 * 20 = 260.
A region of J plants with price 11 * 20 = 220.
A region of C plants with price 1 * 4 = 4.
A region of E plants with price 13 * 18 = 234.
A region of I plants with price 14 * 22 = 308.
A region of M plants with price 5 * 12 = 60.
A region of S plants with price 3 * 8 = 24.
"""
# uncomment to instead use stdin
# import sys; inp = sys.stdin.read().strip()
# uncomment to use AoC provided puzzle input
with open("./input/12.txt", "r") as f:
inp = f.read().strip()
# uncomment to do initial data processing shared by part 1-2
p1, p2 = solve(inp)
print(p1)
os.system(f"echo {p1} | wl-copy")
# print(p2)
# os.system(f"echo {p2} | wl-copy")
# uncomment and replace 0 with actual output to refactor code
# and ensure nonbreaking changes
assert p1 == 1446042
# assert p2 == 0