day 14 p1
This commit is contained in:
74
14/n.py
Normal file
74
14/n.py
Normal file
@@ -0,0 +1,74 @@
|
||||
import os
|
||||
|
||||
input = open(os.path.dirname(__file__) +
|
||||
"/input.txt", "r").readlines()
|
||||
|
||||
cave = set()
|
||||
|
||||
for l in input:
|
||||
points = l.strip().split(' -> ')
|
||||
prev = (0, 0)
|
||||
for p in points:
|
||||
x, y = p.split(',')
|
||||
x = int(x)
|
||||
y = int(y)
|
||||
if prev == (0, 0):
|
||||
prev = (y, x)
|
||||
cave.add(prev)
|
||||
else:
|
||||
dy = y-prev[0]
|
||||
dx = x-prev[1]
|
||||
tmp = set()
|
||||
dir = 1
|
||||
if dy < 0 or dx < 0:
|
||||
dir = -1
|
||||
if dy != 0:
|
||||
for i in range(prev[0], prev[0]+dy+dir, dir):
|
||||
tmp.add((i, prev[1]))
|
||||
if dx != 0:
|
||||
for i in range(prev[1], prev[1]+dx+dir, dir):
|
||||
tmp.add((prev[0], i))
|
||||
cave.update(tmp)
|
||||
prev = (y, x)
|
||||
|
||||
|
||||
def nextdown(pos):
|
||||
possibles = []
|
||||
for y, x in cave:
|
||||
if x == pos[1] and y > pos[0]:
|
||||
possibles.append(y)
|
||||
return (sorted(possibles)[0]-1, X)
|
||||
|
||||
|
||||
cont = True
|
||||
|
||||
emptycave = len(cave)
|
||||
|
||||
floor = max(r[0] for r in cave)+2
|
||||
while cont:
|
||||
X = 500
|
||||
Y = 0
|
||||
current = nextdown((Y, X))
|
||||
moving = True
|
||||
while (moving):
|
||||
|
||||
down = (current[0]+1, current[1])
|
||||
left = (current[0]+1, current[1]-1)
|
||||
right = (current[0]+1, current[1]+1)
|
||||
|
||||
if not down in cave:
|
||||
current = down
|
||||
if current[0] >= floor:
|
||||
cont = False
|
||||
moving = False
|
||||
|
||||
elif not left in cave:
|
||||
current = left
|
||||
elif not right in cave:
|
||||
current = right
|
||||
else:
|
||||
cave.add(current)
|
||||
moving = False
|
||||
|
||||
# print(sorted(cave))
|
||||
print(len(cave)-emptycave)
|
||||
Reference in New Issue
Block a user