Esempio n. 1
0
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
Esempio n. 2
0
 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])
Esempio n. 3
0
    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])
Esempio n. 4
0
    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])
Esempio n. 5
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])
Esempio n. 6
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])
Esempio n. 7
0
    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])
Esempio n. 8
0
    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])
Esempio n. 9
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])