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]
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()
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]))
def test_3_way_comparison_5(self): output = list(run_program(self.three_way_cmp_program, [10])) self.assertEqual(output, [1001])
def test_parameter_mode_op_code(self): self.assertEqual([[1001, 0, 0, 0, 99], []], run_program([1001, 0, 0, 0, 99]))
def test_less_than(self): self.assertEqual([[1, 0, 5, 0, 99], []], run_program([1107, 0, 5, 0, 99]))
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]))
def test_output_printing(self): self.assertEqual([[4, 0, 99], [4]], run_program([4, 0, 99], 1))
def test_single_sum2(self): self.assertEqual([3, 1, 2, 0, 99], run_program([1, 1, 2, 0, 99]))
def test_echo_3(self): program_input = [2] output = list(run_program([3, 0, 4, 0, 99], program_input)) self.assertEqual(output, program_input)
def test_program_modification_immediate_1(self): program = [1002, 4, 3, 4, 33] for _ in run_program(program): pass self.assertEqual(program[4], 99)
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)
def test_program_modification_3(self): program = [2, 4, 4, 5, 99, 0] for _ in run_program(program): pass self.assertEqual(program[5], 9801)
def test_large_numbers_2(self): expected_output = 1125899906842624 program = [104, expected_output, 99] output = list(run_program(program, [])) self.assertEqual([expected_output], output)
def test_large_numbers_1(self): output = list(run_program([1102, 34915192, 34915192, 7, 4, 7, 99, 0], [])) self.assertEqual([1219070632396864], output)
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)
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]))
def test_single_sum(self): self.assertEqual([2, 0, 0, 0, 99], run_program([1, 0, 0, 0, 99]))
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])
def test_input_reading(self): self.assertEqual([[1, 0, 99], []], run_program([3, 0, 99], 1))
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)
def test_negative_numbers(self): self.assertEqual([[-7, -5, -2, 0, 99], []], run_program([1101, -5, -2, 0, 99]))
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])
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]))
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])
def test_equals(self): self.assertEqual([[1, 2, 2, 0, 99], []], run_program([1108, 2, 2, 0, 99]))
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])
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])
def test_3_way_comparison_2(self): output = list(run_program(self.three_way_cmp_program, [7])) self.assertEqual(output, [999])