def solve_part_2(puzzle_input): program = Program(puzzle_input) for noun in range(100): for verb in range(100): program.reset() if run_program(program, noun, verb) == 19690720: return 100 * noun + verb
def test_reset(self): ints = [109, -3, 2002, 6, 9, 7, 99, 0] program = Program(ints) program.run() self.assertNotEqual(program.ip, 0) self.assertNotEqual(program.memory, ints) program.reset() self.assertEqual(program.memory, ints) self.assertEqual(program.ip, 0) program.run() self.assertNotEqual(program.ip, 0) self.assertEqual(program.memory, [109, -3, 2002, 6, 9, 7, 99, 9801])
def test_prog_16(self): # slightly larger test of opcodes 1--8, 99. Program outputs 999 if input is below 8, 1000 if input equals 8 and # 1001 if input is greater than 8. program = Program( '3,21,1008,21,8,20,1005,20,22,107,8,21,20,1006,20,31,' '1106,0,36,98,0,0,1002,21,125,20,4,20,1105,1,46,104,' '999,1105,1,46,1101,1000,1,20,4,20,1105,1,46,98,99') program.inputs.append(0) program.run() self.assertEqual(list(program.outputs), [999]) program.reset() program.inputs.append(7) program.run() self.assertEqual(list(program.outputs), [999]) program.reset() program.inputs.append(8) program.run() self.assertEqual(list(program.outputs), [1000]) program.reset() program.inputs.append(9) program.run() self.assertEqual(list(program.outputs), [1001]) program.reset() program.inputs.append(70) program.run() self.assertEqual(list(program.outputs), [1001])
def test_prog_13(self): # less than, immediate mode. Program tests whether input is less than 8. program = Program('3,3,1107,-1,8,3,4,3,99') program.inputs.append(7) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(6) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(-11) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(8) program.run() self.assertEqual(list(program.outputs), [0]) program.reset() program.inputs.append(60) program.run() self.assertEqual(list(program.outputs), [0])
def test_prog_12(self): # less than, position mode. Program tests whether input is less than 8. program = Program('3,9,7,9,10,9,4,9,99,-1,8') program.inputs.append(7) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(6) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(-11) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(8) program.run() self.assertEqual(list(program.outputs), [0]) program.reset() program.inputs.append(60) program.run() self.assertEqual(list(program.outputs), [0])
def test_prog_15(self): # jumps, immediate mode. Program tests whether input is nonzero program = Program('3,3,1105,-1,9,1101,0,0,12,4,12,99,1') program.inputs.append(0) program.run() self.assertEqual(list(program.outputs), [0]) program.reset() program.inputs.append(1) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(-1) program.run() self.assertEqual(list(program.outputs), [1])
def test_prog_14(self): # jumps, position mode. Program tests whether input is nonzero program = Program('3,12,6,12,15,1,13,14,13,4,13,99,-1,0,1,9') program.inputs.append(0) program.run() self.assertEqual(list(program.outputs), [0]) program.reset() program.inputs.append(1) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(-1) program.run() self.assertEqual(list(program.outputs), [1])
def test_prog_11(self): # equals, immediate mode. Program tests whether input equals 8. program = Program('3,3,1108,-1,8,3,4,3,99') program.inputs.append(8) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(-8) program.run() self.assertEqual(list(program.outputs), [0]) program.reset() program.inputs.append(4) program.run() self.assertEqual(list(program.outputs), [0]) program.reset() program.inputs.append(40) program.run() self.assertEqual(list(program.outputs), [0])
def test_prog_10(self): # equals, position mode. Program tests whether input equals 8. program = Program('3,9,8,9,10,9,4,9,99,-1,8') program.inputs.append(8) program.run() self.assertEqual(list(program.outputs), [1]) program.reset() program.inputs.append(-8) program.run() self.assertEqual(list(program.outputs), [0]) program.reset() program.inputs.append(4) program.run() self.assertEqual(list(program.outputs), [0]) program.reset() program.inputs.append(40) program.run() self.assertEqual(list(program.outputs), [0])