Taddeus Kroes 6 vuotta sitten
vanhempi
sitoutus
7bf6f0ad83
2 muutettua tiedostoa jossa 43 lisäystä ja 0 poistoa
  1. 43 0
      2019/09_boost.py
  2. 0 0
      2019/input/9

+ 43 - 0
2019/09_boost.py

@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+import sys
+from operator import add, mul, lt, eq
+
+def run(p, inputs, memsize=0):
+    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)
+
+        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
+
+        if opcode in (1, 2, 7, 8):
+            pstore(3, opmap[opcode](pload(1), pload(2)))
+            pc += 4
+        elif opcode == 3:
+            pstore(1, inputs.pop())
+            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
+
+program = list(map(int, sys.stdin.read().split(',')))
+print(next(run(program, [1], 10000)))
+print(next(run(program, [2], 10000)))

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
2019/input/9


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä