def part_two(filename: str): lines = data.load_lines(filename) for i in range(len(lines)): copy = lines.copy() if copy[i].startswith("jmp"): copy[i] = copy[i].replace("jmp", "nop") elif copy[i].startswith("nop"): copy[i] = copy[i].replace("nop", "jmp") index, accumulator = 0, 0 seen = [] while True: if index == len(lines): print(accumulator) return accumulator elif index in seen: break else: seen.append(index) index, accumulator = process_instruction( copy[index], index, accumulator)
def test_aoc_03_part_two(): # GIVEN input data input_data = data.load_lines("data/day03.txt") # WHEN calling part_one() result = aoc_03.part_two(input_data) # THEN result is correct assert result == 3584591857
def test_aoc_01_part_one(): # GIVEN input data input_data = data.load_lines("data/day01.txt") # WHEN calling part_one() result = aoc_01.part_one(input_data) # THEN result is correct assert result == 989824
def test_aoc_05_part_two(): # GIVEN input data input_data = data.load_lines("data/day05.txt") # WHEN calling part_two() result = aoc_05.part_two(input_data) # THEN result is correct assert result == 617
taken_seats = list(map(lambda x: get_seat(x), input_data)) taken_seats.sort() possible_seats = list(map(lambda x: f"{x:02o}", range(128 * 8))) possible_seats = list( map(lambda x: (int(x[:-1]), int(x[-1])), possible_seats)) while possible_seats[0] < taken_seats[0]: possible_seats.pop(0) while possible_seats[-1] > taken_seats[-1]: possible_seats.pop(-1) result = None possible_results = list( filter(lambda x: x not in taken_seats, possible_seats)) assert len(possible_results) == 1 row, col = possible_results[0] result = row * 8 + col print(result) return result if __name__ == "__main__": input_data = data.load_lines("data/day05.txt") print("==== Part 1 ====") part_one(input_data) print("==== Part 2 ====") part_two(input_data)
def load(lines): return data.load_lines(lines, Glyphs)
def prep_data(filename: str): lines = data.load_lines(filename) lines = list(map(lambda x: int(x), lines)) return lines
def create_rule_dict(filename: str): lines = data.load_lines(filename) rules = {} for line in lines: rules.update(process_rule(line)) return rules
def part_one(filename: str): lines = data.load_lines(filename) index, accumulator = process_lines(lines) print(accumulator) return accumulator