|
@@ -1,5 +1,6 @@
|
|
|
#!/usr/bin/env python3
|
|
#!/usr/bin/env python3
|
|
|
import sys
|
|
import sys
|
|
|
|
|
+from collections import deque
|
|
|
from operator import add, mul, lt, eq
|
|
from operator import add, mul, lt, eq
|
|
|
|
|
|
|
|
def run(p, get_input, memsize=0):
|
|
def run(p, get_input, memsize=0):
|
|
@@ -38,16 +39,40 @@ def run(p, get_input, memsize=0):
|
|
|
relbase += pload(1)
|
|
relbase += pload(1)
|
|
|
pc += 2
|
|
pc += 2
|
|
|
|
|
|
|
|
|
|
+def deploy_drone(program, x, y):
|
|
|
|
|
+ return next(run(program, [y, x].pop, 1000))
|
|
|
|
|
+
|
|
|
def scan(program, w, h):
|
|
def scan(program, w, h):
|
|
|
- def deploy_drone(x, y):
|
|
|
|
|
- return next(run(program, [y, x].pop, 1000))
|
|
|
|
|
- return [[deploy_drone(x, y) for x in range(w)] for y in range(h)]
|
|
|
|
|
|
|
+ return [[deploy_drone(program, x, y) for x in range(w)] for y in range(h)]
|
|
|
|
|
+
|
|
|
|
|
+def bounds(program):
|
|
|
|
|
+ left = 0
|
|
|
|
|
+ right = 1
|
|
|
|
|
+ y = 0
|
|
|
|
|
+ while True:
|
|
|
|
|
+ yield left, right
|
|
|
|
|
+ y += 1
|
|
|
|
|
+ left += 1
|
|
|
|
|
+ while not deploy_drone(program, left, y):
|
|
|
|
|
+ left += 1
|
|
|
|
|
+ right += 1
|
|
|
|
|
+ while deploy_drone(program, right, y):
|
|
|
|
|
+ right += 1
|
|
|
|
|
|
|
|
-def draw(grid):
|
|
|
|
|
- for row in grid:
|
|
|
|
|
- print(''.join('.#O'[x] for x in row))
|
|
|
|
|
|
|
+def find_box(program, size):
|
|
|
|
|
+ buf = deque([], size - 1)
|
|
|
|
|
+ for y2, (left2, right2) in enumerate(bounds(program)):
|
|
|
|
|
+ if len(buf) == size - 1:
|
|
|
|
|
+ y1, left1, right1 = buf.popleft()
|
|
|
|
|
+ if right1 - left2 >= size:
|
|
|
|
|
+ return left2, y1
|
|
|
|
|
+ buf.append((y2, left2, right2))
|
|
|
|
|
|
|
|
|
|
+# part 1
|
|
|
program = list(map(int, sys.stdin.readline().split(',')))
|
|
program = list(map(int, sys.stdin.readline().split(',')))
|
|
|
grid = scan(program, 50, 50)
|
|
grid = scan(program, 50, 50)
|
|
|
-draw(grid)
|
|
|
|
|
print(sum(sum(row) for row in grid))
|
|
print(sum(sum(row) for row in grid))
|
|
|
|
|
+
|
|
|
|
|
+# part 2
|
|
|
|
|
+bx, by = find_box(program, 100)
|
|
|
|
|
+print(bx * 10000 + by)
|