OpcodeComputer now with initialization

master
fettlaus 6 years ago
parent 9cd7cba1c2
commit 8d76b209a2
  1. 8
      days/comp.py
  2. 4
      days/day2.py
  3. 8
      days/day5.py

@ -14,6 +14,10 @@ class OpcodeComputer():
https://adventofcode.com/2019/day/5
"""
memory = []
def __init__(self, mem: List[int]) -> None:
self.memory = mem
def parse_param(self, pc: int, mem: List[int]) \
-> Tuple[int, int, int, int]:
@ -38,7 +42,7 @@ class OpcodeComputer():
pass
return (int(i[-2:]), a, b, c)
def process_op(self, mem: List[int]) -> int:
def process_op(self) -> int:
"""Run program code
Args:
@ -48,7 +52,9 @@ class OpcodeComputer():
int: Content in memory at position 0
"""
pc: int = 0
mem = list(self.memory)
cmd: int = mem[pc]
while cmd != 99:
cmd, a, b, c = self.parse_param(pc, mem)
if cmd == 1:

@ -12,7 +12,7 @@ class Day2(unittest.TestCase):
code: List[int] = [int(k) for k in fp.readline().split(',')]
code[1] = 12
code[2] = 2
self.assertEqual(OpcodeComputer().process_op(code), 5098658)
self.assertEqual(OpcodeComputer(code).process_op(), 5098658)
def test_day2b(self):
with open(self.inputfile) as fp:
@ -24,7 +24,7 @@ class Day2(unittest.TestCase):
code[1] = a
code[2] = b
result = OpcodeComputer().process_op(code)
result = OpcodeComputer(code).process_op()
if result == 19690720:
break
self.assertEqual(100 * a + b, 5064)

@ -12,21 +12,21 @@ class Day5(unittest.TestCase):
def test_day5a(self):
output_val = []
sut = comp.OpcodeComputer()
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.get_code())
sut.process_op()
self.assertEqual(int(output_val[-1]), 8332629)
def test_day5b(self):
output_val = []
sut = comp.OpcodeComputer()
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.get_code())
sut.process_op()
self.assertEqual(int(output_val[-1]), 8805067)

Loading…
Cancel
Save