def part_2(): data = get_input() oxy_list = data i = 0 while len(oxy_list) > 1: zeros, ones = [], [] for x in oxy_list: zeros.append(x) if x[i] == '0' else ones.append(x) if len(zeros) > (len(oxy_list) / 2): oxy_list = zeros else: oxy_list = ones i += 1 co2_list = data i = 0 while len(co2_list) > 1: zeros, ones = [], [] for x in co2_list: zeros.append(x) if x[i] == '0' else ones.append(x) if len(zeros) > (len(co2_list) / 2): co2_list = ones else: co2_list = zeros i += 1 print(BitArray(bin=oxy_list[0]).uint * BitArray(bin=co2_list[0]).uint)
def part_1(): data = [SnailfishNumber(ast.literal_eval(x)) for x in get_input()] start = data[0] for i in data[1:]: start = start + i print(start.magnitude())
def split_input(): data = get_input() splitter_index = 0 for index, val in enumerate(data): if val == "": splitter_index = index break return data[:splitter_index], [x.split()[2] for x in data[splitter_index + 1:]]
def part_1(): data = [int(x) for x in get_input()] dec = 0 prev = data[0] for i in data: if i > prev: dec += 1 prev = i print(f"Part 1: {dec}")
def part_2(): octo = OctoMap(get_input()) num_octo = (octo.max_x + 1) * (octo.max_y + 1) counter = 0 while True: counter += 1 if octo.simulate() == num_octo: break print(counter)
def lantern_simulate(days: int): data = [int(x) for x in get_input()[0].split(",")] population = deque(([0] * 9)) for i in data: population[i] += 1 for i in range(days): population.rotate(-1) population[-3] += population[8] print(sum(population))
def part_2(): data = [int(x) for x in get_input()] prev = 0 dec = 0 for i, _ in enumerate(data[:-3]): temp = data[i] + data[i+1] + data[i+2] if temp > prev: dec += 1 prev = temp print(f"Part 2: {dec}")
def part_1(): data = get_input() calls = data[0].split(',') boards = build_boards(data[2:]) last_call = 0 winner: BingoBoard = None for call in calls: for board in boards: if board.mark_and_check(call): last_call = int(call) winner = board break if winner: break print(last_call * winner.sum_unmarked())
def part_2(): data = get_input() calls = data[0].split(',') boards = build_boards(data[2:]) last_call = 0 winner: BingoBoard = None for call in calls: rem_boards = [b for b in boards if not b.has_won] for board in rem_boards: if board.mark_and_check(call) and len(rem_boards) == 1: last_call = int(call) winner = board if winner is not None: break print(last_call * winner.sum_unmarked())
def part_1(): data = [x.split() for x in get_input()] depth = 0 horizontal = 0 for i in data: direction, amt = i amt: int = int(amt) match direction: case 'forward': horizontal += amt case 'down': depth -= amt case 'up': depth += amt print(abs(depth) * horizontal)
def part_1(): data = get_input() counts = get_bitcount_array(data) half = len(data) / 2 for index, i in enumerate(counts): if i < half: counts[index] = '0' else: counts[index] = '1' bits = BitArray(bin=''.join(counts)) gamma = bits.uint bits.invert() epsilon = bits.uint print(f"{gamma * epsilon}")
def get_field_and_points(): data = get_input() points = [] max_x = 0 max_y = 0 for line in data: values = line.split(" -> ") x1, y1 = [int(x) for x in values[0].split(",")] x2, y2 = [int(x) for x in values[1].split(",")] max_x = max(max_x, max(x1, x2)) max_y = max(max_y, max(y1, y2)) points.append([(x1, y1), (x2, y2)]) max_y += 1 max_x += 1 field = [[]] * max_y for i in range(max_x): field[i] = ([0] * max_x) return field, points
def part_2(): data = sorted([complete_and_score_line(x) for x in get_input() if score_line(x) == 0]) print(data[int(len(data)/2)])
def main(): p = ProbeCannon(get_input()[0]) v = p.get_all_valids() print(max([p.fire(x) for x in v])) print(len(v))
def part_2(): print(ChitonMap(get_input(), 5).find_path())
def part_2(): data = [SnailfishNumber(ast.literal_eval(x)) for x in get_input()] print(max([(copy.deepcopy(x) + copy.deepcopy(y)).magnitude() for x, y in itertools.permutations(data, 2)]))
def part_1(): data = [x.split(" | ")[1] for x in get_input()] counts = [len([y for y in x.split() if check_length(y)]) for x in data] print(sum(counts))
def part_2(): data = get_input() print(sum([interpret_line(x) for x in data]))
def part_1(): b = BitsMessage(get_input()[0]) print(b.sum_versions())
def part_1(): print(CaveMap(get_input()).trace_route())
def part_1(): v = VentMap(get_input()) print(v.sum_risks())
def part_1(): octo = OctoMap(get_input()) print(sum([octo.simulate() for _ in range(100)]))
def part_2(): c = CaveMap(get_input()) print(c.trace_route(with_backtrack=True))
def part_1(): print(sum([score_line(x) for x in get_input()]))
def part_2(): b = BitsMessage(get_input()[0]) print(b.execute())
def part_2(): v = VentMap(get_input()) v.paint_basins() basin_sizes = heapq.nlargest(3, v.list_basins().values()) print(math.prod(basin_sizes))
def simulate_polymer(steps: int): p = PolymerChain(get_input()) [p.transform() for _ in range(steps)] sorted_stats = sorted(p.generate_stats().values(), reverse=True) print(sorted_stats[0] - sorted_stats[-1])