Esempio n. 1
0
def run_program_with_noun_and_verb(program: List[int], noun: int, verb: int):
    program_copy = program.copy()
    program_copy[1] = noun
    program_copy[2] = verb
    for _ in run_program(program_copy):
        pass
    return program_copy[0]
Esempio n. 2
0
def gravityAssist(file):
    memory = readInput(file)
    original_memory = memory.copy()
    for noun in range(99):
        for verb in range(99):
            memory[1] = noun
            memory[2] = verb
            output = run_program(memory)[0]
            if output == 19690720:
                print(noun, verb)
                return
            else:
                memory = original_memory.copy()
Esempio n. 3
0
def run_amps(program: List[int], phase_settings: Tuple[int, ...]):
    amp_inputs = []
    for amp in range(NUMBER_OF_AMPS):
        amp_inputs.append([phase_settings[amp]])
    amps = []
    for amp in range(NUMBER_OF_AMPS):
        amps.append(run_program(program.copy(), amp_inputs[amp]))
    next_amp_input = 0
    current_amp = 0
    while True:
        amp_inputs[current_amp].append(next_amp_input)
        output = next(amps[current_amp], None)
        if output is None:
            break
        next_amp_input = output
        current_amp = (current_amp + 1) % NUMBER_OF_AMPS
    return next_amp_input
 def test_multiple_sum(self):
     self.assertEqual([2, 3, 0, 0, 1, 0, 4, 1, 99],
                      run_program([1, 0, 0, 0, 1, 0, 4, 1, 99]))
Esempio n. 5
0
 def test_3_way_comparison_5(self):
     output = list(run_program(self.three_way_cmp_program, [10]))
     self.assertEqual(output, [1001])
Esempio n. 6
0
 def test_parameter_mode_op_code(self):
     self.assertEqual([[1001, 0, 0, 0, 99], []],
                      run_program([1001, 0, 0, 0, 99]))
Esempio n. 7
0
 def test_less_than(self):
     self.assertEqual([[1, 0, 5, 0, 99], []],
                      run_program([1107, 0, 5, 0, 99]))
Esempio n. 8
0
 def test_jump_if_true(self):
     self.assertEqual([[5, 1, 5, 1, 1, 2, 1, 2, 0, 99], []],
                      run_program([1105, 1, 5, 1, 1, 2, 1, 2, 0, 99]))
Esempio n. 9
0
 def test_output_printing(self):
     self.assertEqual([[4, 0, 99], [4]], run_program([4, 0, 99], 1))
Esempio n. 10
0
 def test_single_sum2(self):
     self.assertEqual([3, 1, 2, 0, 99], run_program([1, 1, 2, 0, 99]))
Esempio n. 11
0
 def test_echo_3(self):
     program_input = [2]
     output = list(run_program([3, 0, 4, 0, 99], program_input))
     self.assertEqual(output, program_input)
Esempio n. 12
0
 def test_program_modification_immediate_1(self):
     program = [1002, 4, 3, 4, 33]
     for _ in run_program(program):
         pass
     self.assertEqual(program[4], 99)
Esempio n. 13
0
 def test_program_modification_4(self):
     program = [1, 1, 1, 4, 99, 5, 6, 0, 99]
     for _ in run_program(program):
         pass
     self.assertEqual(program[0], 30)
Esempio n. 14
0
 def test_program_modification_3(self):
     program = [2, 4, 4, 5, 99, 0]
     for _ in run_program(program):
         pass
     self.assertEqual(program[5], 9801)
Esempio n. 15
0
 def test_large_numbers_2(self):
     expected_output = 1125899906842624
     program = [104, expected_output, 99]
     output = list(run_program(program, []))
     self.assertEqual([expected_output], output)
Esempio n. 16
0
 def test_large_numbers_1(self):
     output = list(run_program([1102, 34915192, 34915192, 7, 4, 7, 99, 0], []))
     self.assertEqual([1219070632396864], output)
Esempio n. 17
0
 def test_relative_and_extra_space(self):
     program = [109, 1, 204, -1, 1001, 100, 1, 100, 1008, 100, 16, 101, 1006, 101, 0, 99]
     output = list(run_program(program.copy(), []))
     self.assertEqual(program, output)
Esempio n. 18
0
 def test_multiplication_and_sum(self):
     self.assertEqual([4, 5, 4, 0, 1, 0, 4, 1, 99],
                      run_program([2, 2, 4, 0, 1, 0, 4, 1, 99]))
Esempio n. 19
0
 def test_single_sum(self):
     self.assertEqual([2, 0, 0, 0, 99], run_program([1, 0, 0, 0, 99]))
Esempio n. 20
0
 def test_equal_to_8_position_2(self):
     program = [3, 9, 8, 9, 10, 9, 4, 9, 99, -1, 8]
     output = list(run_program(program, [8]))
     self.assertEqual(output, [1])
Esempio n. 21
0
 def test_input_reading(self):
     self.assertEqual([[1, 0, 99], []], run_program([3, 0, 99], 1))
Esempio n. 22
0
 def test_program_modification_1(self):
     program = [1, 9, 10, 3, 2, 3, 11, 0, 99, 30, 40, 50]
     for _ in run_program(program):
         pass
     self.assertEqual(program[0], 3500)
Esempio n. 23
0
 def test_negative_numbers(self):
     self.assertEqual([[-7, -5, -2, 0, 99], []],
                      run_program([1101, -5, -2, 0, 99]))
Esempio n. 24
0
 def test_less_than_8_position_3(self):
     program = [3, 9, 7, 9, 10, 9, 4, 9, 99, -1, 8]
     output = list(run_program(program, [9]))
     self.assertEqual(output, [0])
Esempio n. 25
0
 def test_jump_if_false(self):
     self.assertEqual([[5, 0, 5, 1, 1, 1, 1, 2, 0, 99], []],
                      run_program([1106, 0, 5, 1, 1, 1, 1, 2, 0, 99]))
Esempio n. 26
0
 def test_equal_to_8_immediate_3(self):
     program = [3, 3, 1108, -1, 8, 3, 4, 3, 99]
     output = list(run_program(program, [9]))
     self.assertEqual(output, [0])
Esempio n. 27
0
 def test_equals(self):
     self.assertEqual([[1, 2, 2, 0, 99], []],
                      run_program([1108, 2, 2, 0, 99]))
Esempio n. 28
0
 def test_jump_immediate_3(self):
     program = [3, 3, 1105, -1, 9, 1101, 0, 0, 12, 4, 12, 99, 1]
     output = list(run_program(program, [3]))
     self.assertEqual(output, [1])
Esempio n. 29
0
 def test_less_than_8_immediate_1(self):
     program = [3, 3, 1107, -1, 8, 3, 4, 3, 99]
     output = list(run_program(program, [7]))
     self.assertEqual(output, [1])
Esempio n. 30
0
 def test_3_way_comparison_2(self):
     output = list(run_program(self.three_way_cmp_program, [7]))
     self.assertEqual(output, [999])