Day 12
This commit is contained in:
parent
321d55e31c
commit
f342df95c5
80
day12.py
Normal file
80
day12.py
Normal file
@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# https://adventofcode.com/2025/day/12
|
||||
|
||||
import re
|
||||
|
||||
|
||||
def prep_data(filename):
|
||||
shape_re = re.compile(r"\d:")
|
||||
region_re = re.compile(r"\d+x\d+:")
|
||||
shapes, regions, quantities = {}, [], []
|
||||
|
||||
f = open(filename, "r")
|
||||
lines = [l.rstrip("\n") for l in f.readlines()]
|
||||
f.close()
|
||||
|
||||
while lines != []:
|
||||
line = lines.pop(0)
|
||||
|
||||
# shape
|
||||
if shape_re.match(line):
|
||||
tmp = []
|
||||
# read shape lines
|
||||
while True:
|
||||
l = lines.pop(0)
|
||||
if l == "":
|
||||
break
|
||||
else:
|
||||
tmp.append(l)
|
||||
|
||||
# parse shape
|
||||
shape = []
|
||||
for i in range(len(tmp)):
|
||||
for j in range(len(tmp[0])):
|
||||
if tmp[i][j] == "#":
|
||||
shape.append((i, j))
|
||||
shapes["shape-" + line[:-1]] = shape
|
||||
|
||||
# region & quantities
|
||||
elif region_re.match(line):
|
||||
tmp = line.split(" ")
|
||||
regions.append(list(map(int, tmp.pop(0)[:-1].split("x"))))
|
||||
quantities.append(list(map(int, tmp)))
|
||||
|
||||
return shapes, regions, quantities
|
||||
|
||||
|
||||
def solve_part_1() -> int:
|
||||
shapes, regions, quantities = prep_data("day12input.txt")
|
||||
areas = [len(shape) for shape in shapes]
|
||||
|
||||
solvable, unsolvable, dont_know = 0, 0, 0
|
||||
|
||||
# loop over problems
|
||||
for i in range(len(regions)):
|
||||
board = regions[i]
|
||||
quantity = quantities[i]
|
||||
|
||||
# simple solvability check
|
||||
if board[0] * board[1] < sum(list(map(lambda a, q: a * q, areas, quantity))):
|
||||
print(f"Problem {i} is unsolvable")
|
||||
unsolvable += 1
|
||||
|
||||
# check if a tileset of 3x3 squares would fit in theory
|
||||
elif (board[0] // 3) * (board[1] // 3) >= sum(quantity):
|
||||
print(f"Problem {i} is solvable")
|
||||
solvable += 1
|
||||
|
||||
else:
|
||||
print(f"don't know about problem {i}")
|
||||
dont_know += 1
|
||||
|
||||
print(f"{solvable=}")
|
||||
print(f"{unsolvable=}")
|
||||
print(f"{dont_know=}")
|
||||
return solvable
|
||||
|
||||
|
||||
# solve part 1
|
||||
print(solve_part_1())
|
||||
1030
day12input.txt
Normal file
1030
day12input.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user