Roderic Day vor 2 Jahren
Ursprung
Commit
9aeb8488f1
1 geänderte Dateien mit 48 neuen und 0 gelöschten Zeilen
  1. +48
    -0
      y2022/p14.py

+ 48
- 0
y2022/p14.py Datei anzeigen

@@ -0,0 +1,48 @@
def build_grid(text):
grid = {}
for ln in text.splitlines():
ns = map(int, ''.join(n if n.isdigit() else ' ' for n in ln).split())
nodes = [complex(x, y) for x, y in zip(*[ns] * 2)]
for aa, bb in zip(nodes, nodes[1:]):
step = (bb - aa) / abs(bb - aa)
while aa != bb:
grid[aa] = '#'
aa += step
grid[aa] = '#'
return grid


def drip(grid, start, floor, p1=False, dof=[1j, 1j - 1, 1j + 1]):
pos = start
while True:
for new in (pos + step for step in dof):
if new not in grid and new.imag != floor:
pos = new
break
else:
grid[pos] = 'o'
yield True
pos = start

if p1:
if pos.imag == floor - 1:
break
else:
if grid.get(start) == 'o':
break


def main():
text = open(0).read()
grid = build_grid(text)
start = complex(500, 0)
floor = max(p.imag for p in grid) + 2

ans1 = sum(drip(grid.copy(), start, floor, True))
print(ans1)

ans2 = sum(drip(grid.copy(), start, floor))
print(ans2)


main()

Laden…
Abbrechen
Speichern