Day 14
This commit is contained in:
123
day14/input.txt
Normal file
123
day14/input.txt
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
512,122 -> 512,118 -> 512,122 -> 514,122 -> 514,120 -> 514,122 -> 516,122 -> 516,121 -> 516,122
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
516,125 -> 516,129 -> 515,129 -> 515,136 -> 526,136 -> 526,129 -> 519,129 -> 519,125
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
512,122 -> 512,118 -> 512,122 -> 514,122 -> 514,120 -> 514,122 -> 516,122 -> 516,121 -> 516,122
|
||||||
|
511,86 -> 515,86
|
||||||
|
485,22 -> 489,22
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
509,150 -> 513,150
|
||||||
|
516,65 -> 516,69 -> 508,69 -> 508,74 -> 521,74 -> 521,69 -> 520,69 -> 520,65
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
494,157 -> 494,159 -> 491,159 -> 491,167 -> 503,167 -> 503,159 -> 499,159 -> 499,157
|
||||||
|
494,157 -> 494,159 -> 491,159 -> 491,167 -> 503,167 -> 503,159 -> 499,159 -> 499,157
|
||||||
|
512,139 -> 512,142 -> 509,142 -> 509,145 -> 521,145 -> 521,142 -> 517,142 -> 517,139
|
||||||
|
512,139 -> 512,142 -> 509,142 -> 509,145 -> 521,145 -> 521,142 -> 517,142 -> 517,139
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
494,24 -> 498,24
|
||||||
|
516,65 -> 516,69 -> 508,69 -> 508,74 -> 521,74 -> 521,69 -> 520,69 -> 520,65
|
||||||
|
494,157 -> 494,159 -> 491,159 -> 491,167 -> 503,167 -> 503,159 -> 499,159 -> 499,157
|
||||||
|
497,154 -> 501,154
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
523,80 -> 527,80
|
||||||
|
512,139 -> 512,142 -> 509,142 -> 509,145 -> 521,145 -> 521,142 -> 517,142 -> 517,139
|
||||||
|
505,17 -> 510,17
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
498,17 -> 503,17
|
||||||
|
512,122 -> 512,118 -> 512,122 -> 514,122 -> 514,120 -> 514,122 -> 516,122 -> 516,121 -> 516,122
|
||||||
|
512,139 -> 512,142 -> 509,142 -> 509,145 -> 521,145 -> 521,142 -> 517,142 -> 517,139
|
||||||
|
494,157 -> 494,159 -> 491,159 -> 491,167 -> 503,167 -> 503,159 -> 499,159 -> 499,157
|
||||||
|
516,125 -> 516,129 -> 515,129 -> 515,136 -> 526,136 -> 526,129 -> 519,129 -> 519,125
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
516,125 -> 516,129 -> 515,129 -> 515,136 -> 526,136 -> 526,129 -> 519,129 -> 519,125
|
||||||
|
509,31 -> 509,32 -> 513,32 -> 513,31
|
||||||
|
504,90 -> 504,91 -> 513,91 -> 513,90
|
||||||
|
493,48 -> 493,49 -> 512,49 -> 512,48
|
||||||
|
479,26 -> 483,26
|
||||||
|
488,24 -> 492,24
|
||||||
|
512,152 -> 516,152
|
||||||
|
491,26 -> 495,26
|
||||||
|
493,48 -> 493,49 -> 512,49 -> 512,48
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
512,122 -> 512,118 -> 512,122 -> 514,122 -> 514,120 -> 514,122 -> 516,122 -> 516,121 -> 516,122
|
||||||
|
517,80 -> 521,80
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
494,157 -> 494,159 -> 491,159 -> 491,167 -> 503,167 -> 503,159 -> 499,159 -> 499,157
|
||||||
|
514,83 -> 518,83
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
529,86 -> 533,86
|
||||||
|
526,83 -> 530,83
|
||||||
|
497,13 -> 502,13
|
||||||
|
516,108 -> 516,109 -> 520,109 -> 520,108
|
||||||
|
512,139 -> 512,142 -> 509,142 -> 509,145 -> 521,145 -> 521,142 -> 517,142 -> 517,139
|
||||||
|
516,125 -> 516,129 -> 515,129 -> 515,136 -> 526,136 -> 526,129 -> 519,129 -> 519,125
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
503,154 -> 507,154
|
||||||
|
494,15 -> 499,15
|
||||||
|
520,77 -> 524,77
|
||||||
|
506,152 -> 510,152
|
||||||
|
516,65 -> 516,69 -> 508,69 -> 508,74 -> 521,74 -> 521,69 -> 520,69 -> 520,65
|
||||||
|
516,65 -> 516,69 -> 508,69 -> 508,74 -> 521,74 -> 521,69 -> 520,69 -> 520,65
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
494,157 -> 494,159 -> 491,159 -> 491,167 -> 503,167 -> 503,159 -> 499,159 -> 499,157
|
||||||
|
512,139 -> 512,142 -> 509,142 -> 509,145 -> 521,145 -> 521,142 -> 517,142 -> 517,139
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
493,48 -> 493,49 -> 512,49 -> 512,48
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
516,108 -> 516,109 -> 520,109 -> 520,108
|
||||||
|
512,122 -> 512,118 -> 512,122 -> 514,122 -> 514,120 -> 514,122 -> 516,122 -> 516,121 -> 516,122
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
488,20 -> 492,20
|
||||||
|
500,152 -> 504,152
|
||||||
|
509,31 -> 509,32 -> 513,32 -> 513,31
|
||||||
|
509,154 -> 513,154
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
516,125 -> 516,129 -> 515,129 -> 515,136 -> 526,136 -> 526,129 -> 519,129 -> 519,125
|
||||||
|
523,86 -> 527,86
|
||||||
|
516,125 -> 516,129 -> 515,129 -> 515,136 -> 526,136 -> 526,129 -> 519,129 -> 519,125
|
||||||
|
491,22 -> 495,22
|
||||||
|
497,26 -> 501,26
|
||||||
|
506,148 -> 510,148
|
||||||
|
516,65 -> 516,69 -> 508,69 -> 508,74 -> 521,74 -> 521,69 -> 520,69 -> 520,65
|
||||||
|
512,122 -> 512,118 -> 512,122 -> 514,122 -> 514,120 -> 514,122 -> 516,122 -> 516,121 -> 516,122
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
494,157 -> 494,159 -> 491,159 -> 491,167 -> 503,167 -> 503,159 -> 499,159 -> 499,157
|
||||||
|
516,108 -> 516,109 -> 520,109 -> 520,108
|
||||||
|
501,15 -> 506,15
|
||||||
|
516,125 -> 516,129 -> 515,129 -> 515,136 -> 526,136 -> 526,129 -> 519,129 -> 519,125
|
||||||
|
491,17 -> 496,17
|
||||||
|
516,65 -> 516,69 -> 508,69 -> 508,74 -> 521,74 -> 521,69 -> 520,69 -> 520,65
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
512,122 -> 512,118 -> 512,122 -> 514,122 -> 514,120 -> 514,122 -> 516,122 -> 516,121 -> 516,122
|
||||||
|
512,139 -> 512,142 -> 509,142 -> 509,145 -> 521,145 -> 521,142 -> 517,142 -> 517,139
|
||||||
|
504,90 -> 504,91 -> 513,91 -> 513,90
|
||||||
|
503,45 -> 503,41 -> 503,45 -> 505,45 -> 505,43 -> 505,45 -> 507,45 -> 507,37 -> 507,45 -> 509,45 -> 509,35 -> 509,45 -> 511,45 -> 511,37 -> 511,45
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
|
482,24 -> 486,24
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
509,31 -> 509,32 -> 513,32 -> 513,31
|
||||||
|
516,65 -> 516,69 -> 508,69 -> 508,74 -> 521,74 -> 521,69 -> 520,69 -> 520,65
|
||||||
|
512,122 -> 512,118 -> 512,122 -> 514,122 -> 514,120 -> 514,122 -> 516,122 -> 516,121 -> 516,122
|
||||||
|
515,154 -> 519,154
|
||||||
|
517,86 -> 521,86
|
||||||
|
485,26 -> 489,26
|
||||||
|
504,90 -> 504,91 -> 513,91 -> 513,90
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
510,104 -> 510,96 -> 510,104 -> 512,104 -> 512,101 -> 512,104 -> 514,104 -> 514,100 -> 514,104 -> 516,104 -> 516,103 -> 516,104
|
||||||
|
503,150 -> 507,150
|
||||||
|
520,83 -> 524,83
|
||||||
|
508,62 -> 508,56 -> 508,62 -> 510,62 -> 510,52 -> 510,62 -> 512,62 -> 512,60 -> 512,62 -> 514,62 -> 514,58 -> 514,62 -> 516,62 -> 516,55 -> 516,62
|
||||||
62
day14/part1.py
Normal file
62
day14/part1.py
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import math
|
||||||
|
from functools import reduce
|
||||||
|
from itertools import count
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
lines = list(np.array([[int(z) for z in y.split(',')] for y in x.strip().split(" -> ")]) for x in open("input.txt"))
|
||||||
|
|
||||||
|
|
||||||
|
all = reduce(lambda x, y: np.concatenate((x, y)), lines, np.array([[500, 0]]))
|
||||||
|
span = np.zeros((2, 2), dtype=int)
|
||||||
|
span[0] = np.min(all, axis=0)
|
||||||
|
span[1] = np.max(all, axis=0) + 1
|
||||||
|
print(span)
|
||||||
|
grid = np.full(tuple(span[1]-span[0]), False)
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
line = line-span[0]
|
||||||
|
#print("line", line)
|
||||||
|
for a, b in zip(line[:-1], line[1:]):
|
||||||
|
a, b = np.min((a, b), axis=0), np.max((a, b), axis=0)
|
||||||
|
#print("pair", a, b)
|
||||||
|
grid[a[0]:b[0]+1, a[1]:b[1]+1] = True
|
||||||
|
#print('\n+'.join(''.join('#' if p else '.' for p in l) for l in grid.T))
|
||||||
|
|
||||||
|
def drop():
|
||||||
|
x, y = 500-span[0, 0], 0
|
||||||
|
if grid[y, x]:
|
||||||
|
return False
|
||||||
|
while True:
|
||||||
|
#print("Test", x-span[0, 0], y)
|
||||||
|
if y+1 == grid.shape[1]:
|
||||||
|
return None
|
||||||
|
elif not grid[x, y+1]:
|
||||||
|
y += 1
|
||||||
|
elif x == 0:
|
||||||
|
return None
|
||||||
|
elif not grid[x-1, y+1]:
|
||||||
|
x, y = x-1, y+1
|
||||||
|
elif x+1 == grid.shape[0]:
|
||||||
|
return None
|
||||||
|
elif not grid[x+1, y+1]:
|
||||||
|
x, y = x+1, y+1
|
||||||
|
else:
|
||||||
|
return x, y
|
||||||
|
|
||||||
|
|
||||||
|
for cnt in count():
|
||||||
|
pos = drop()
|
||||||
|
#print(pos)
|
||||||
|
|
||||||
|
if pos is None:
|
||||||
|
print("Res", cnt)
|
||||||
|
break
|
||||||
|
if not pos:
|
||||||
|
print("Start is occupied!")
|
||||||
|
break
|
||||||
|
grid[pos] = True
|
||||||
|
print('\n'.join(''.join('#' if p else '.' for p in l) for l in grid.T))
|
||||||
|
|
||||||
|
|
||||||
37
day14/part2.py
Normal file
37
day14/part2.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
from itertools import count
|
||||||
|
|
||||||
|
lines = ([[int(z) for z in y.split(',')] for y in x.strip().split(" -> ")] for x in open("input.txt"))
|
||||||
|
blocked = set()
|
||||||
|
bottom = 0
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
for a, b in zip(line[:-1], line[1:]):
|
||||||
|
for x in range(min(a[0], b[0]), max(a[0], b[0])+1):
|
||||||
|
for y in range(min(a[1], b[1]), max(a[1], b[1])+1):
|
||||||
|
blocked.add((x, y))
|
||||||
|
bottom = max(bottom, y)
|
||||||
|
|
||||||
|
|
||||||
|
def drop():
|
||||||
|
x, y = 500, 0
|
||||||
|
if (x, y) in blocked:
|
||||||
|
return False
|
||||||
|
while y-1 != bottom:
|
||||||
|
for nxt in ((x, y+1), (x-1, y+1), (x+1, y+1)):
|
||||||
|
if nxt not in blocked:
|
||||||
|
x, y = nxt
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
return x, y
|
||||||
|
return x, y
|
||||||
|
|
||||||
|
|
||||||
|
for cnt in count():
|
||||||
|
pos = drop()
|
||||||
|
if not pos:
|
||||||
|
print("Start is occupied!", cnt)
|
||||||
|
break
|
||||||
|
blocked.add(pos)
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user