OpcodeComputer input/output now uses lists

master
fettlaus 6 years ago
parent 8d76b209a2
commit 0e2c9f2d27
  1. 16
      days/comp.py
  2. 18
      days/day5.py

@ -1,4 +1,4 @@
from typing import List, Tuple
from typing import List, Tuple, Any
class OpcodeComputer():
@ -42,7 +42,7 @@ class OpcodeComputer():
pass
return (int(i[-2:]), a, b, c)
def process_op(self) -> int:
def process_op(self, inp: List[int] = [], outp: List[Any] = []) -> int:
"""Run program code
Args:
@ -64,10 +64,10 @@ class OpcodeComputer():
mem[mem[pc+3]] = a * b
pc += 4
elif cmd == 3:
mem[mem[pc+1]] = int(input())
mem[mem[pc+1]] = int(inp.pop(0))
pc += 2
elif cmd == 4:
print(str(a))
outp.append(str(a))
pc += 2
elif cmd == 5:
pc = b if a != 0 else pc + 3
@ -81,11 +81,3 @@ class OpcodeComputer():
pc += 4
cmd = mem[pc]
return mem[0]
def input() -> str:
return input()
def print(text: str):
print(text)

@ -10,23 +10,17 @@ class Day5(unittest.TestCase):
return [int(k) for k in fp.readline().split(',')]
def test_day5a(self):
output_val = []
outp = []
sut = comp.OpcodeComputer(self.get_code())
# replace input() and print() to simulate user behavior
comp.input = lambda: 1
comp.print = lambda s: output_val.append(s)
sut.process_op()
self.assertEqual(int(output_val[-1]), 8332629)
sut.process_op([1], outp)
self.assertEqual(int(outp[-1]), 8332629)
def test_day5b(self):
output_val = []
outp = []
sut = comp.OpcodeComputer(self.get_code())
# replace input() and print() to simulate user behavior
comp.input = lambda: 5
comp.print = lambda s: output_val.append(s)
sut.process_op()
self.assertEqual(int(output_val[-1]), 8805067)
sut.process_op([5], outp)
self.assertEqual(int(outp[-1]), 8805067)

Loading…
Cancel
Save