|
@@ -2,43 +2,7 @@
|
|
|
import sys
|
|
import sys
|
|
|
from collections import deque
|
|
from collections import deque
|
|
|
from itertools import islice
|
|
from itertools import islice
|
|
|
-from operator import add, mul, lt, eq
|
|
|
|
|
-
|
|
|
|
|
-def run(p, get_input, memsize=0):
|
|
|
|
|
- def decode_param(offset):
|
|
|
|
|
- return p[pc + offset], modes // (10 ** (offset - 1)) % 10
|
|
|
|
|
-
|
|
|
|
|
- def pload(offset):
|
|
|
|
|
- param, mode = decode_param(offset)
|
|
|
|
|
- return param if mode == 1 else p[param + relbase * mode // 2]
|
|
|
|
|
-
|
|
|
|
|
- def pstore(offset, value):
|
|
|
|
|
- param, mode = decode_param(offset)
|
|
|
|
|
- p[param + relbase * mode // 2] = value
|
|
|
|
|
-
|
|
|
|
|
- opmap = {1: add, 2: mul, 7: lt, 8: eq}
|
|
|
|
|
- p = p + [0] * memsize
|
|
|
|
|
- pc = relbase = 0
|
|
|
|
|
-
|
|
|
|
|
- while p[pc] != 99:
|
|
|
|
|
- modes, opcode = divmod(p[pc], 100)
|
|
|
|
|
-
|
|
|
|
|
- if opcode in (1, 2, 7, 8):
|
|
|
|
|
- pstore(3, opmap[opcode](pload(1), pload(2)))
|
|
|
|
|
- pc += 4
|
|
|
|
|
- elif opcode == 3:
|
|
|
|
|
- pstore(1, get_input())
|
|
|
|
|
- pc += 2
|
|
|
|
|
- elif opcode == 4:
|
|
|
|
|
- yield pload(1)
|
|
|
|
|
- pc += 2
|
|
|
|
|
- elif opcode == 5:
|
|
|
|
|
- pc = pload(2) if pload(1) else pc + 3
|
|
|
|
|
- elif opcode == 6:
|
|
|
|
|
- pc = pload(2) if not pload(1) else pc + 3
|
|
|
|
|
- elif opcode == 9:
|
|
|
|
|
- relbase += pload(1)
|
|
|
|
|
- pc += 2
|
|
|
|
|
|
|
+from intcode import read_program, run
|
|
|
|
|
|
|
|
def deploy_drone(program, x, y):
|
|
def deploy_drone(program, x, y):
|
|
|
return next(run(program, [y, x].pop, 1000))
|
|
return next(run(program, [y, x].pop, 1000))
|
|
@@ -70,7 +34,7 @@ def find_box(program, size):
|
|
|
buf.append((y2, left2, right2))
|
|
buf.append((y2, left2, right2))
|
|
|
|
|
|
|
|
# part 1
|
|
# part 1
|
|
|
-program = list(map(int, sys.stdin.readline().split(',')))
|
|
|
|
|
|
|
+program = read_program(sys.stdin)
|
|
|
#print(sum(sum(row) for row in scan(program, 50, 50)))
|
|
#print(sum(sum(row) for row in scan(program, 50, 50)))
|
|
|
print(sum(min(r, 50) - l for l, r in islice(bounds(program), 50) if l < 50))
|
|
print(sum(min(r, 50) - l for l, r in islice(bounds(program), 50) if l < 50))
|
|
|
|
|
|