if len(possible) == 1: break aller = possible.pop() assigned[aller] = ingr del possible_allers[ingr] for ingr, possible in possible_allers.items(): if aller in possible: possible.remove(aller) return assigned advent.setup(2020, 21) fin = advent.get_input() recipes, possible_allers, recipes_with = parse_input(fin) safe = safe_ingredients(recipes, possible_allers, recipes_with) tot = sum(ingr in r for r in recipes for ingr in safe) advent.print_answer(1, tot) for ingr in safe: del possible_allers[ingr] assigned = simplify(possible_allers) lst = ','.join(map(assigned.get, sorted(assigned))) advent.print_answer(2, lst)
p = (p[0] + MOVE_DX[d], p[1] + MOVE_DY[d]) visited.add(p) cur_steps += 1 if p not in steps: steps[p] = cur_steps return visited, steps def manhattan(p): return abs(p[0]) + abs(p[1]) advent.setup(2019, 3) lines = advent.get_input().readlines() all_visited = [] all_steps = [] for l in lines: visited, steps = get_visited_and_steps(map(make_move, l.split(','))) all_visited.append(visited) all_steps.append(steps) intersections = set.intersection(*all_visited) min_distance = min(map(manhattan, intersections)) advent.print_answer(1, min_distance) shortest_path = min(sum(l[p] for l in all_steps) for p in intersections) advent.print_answer(2, shortest_path)
while len(r): c = r.popleft() if c in ignore: continue if len(l) and c ^ l[-1] == 0x20: l.pop() else: l.append(c) return l advent.setup(2018, 5) fin = advent.get_input(mode='rb') polymer = fin.read().rstrip() trimmed = react_fast(polymer) reacted_len = len(trimmed) advent.print_answer(1, reacted_len) best_reacted_len = reacted_len for l, L in zip(ascii_lowercase.encode(), ascii_uppercase.encode()): reacted_len = len(react_fast(trimmed, {l, L})) if reacted_len < best_reacted_len: best_reacted_len = reacted_len
#!/usr/bin/env python3 from utils import advent advent.setup(2018, 1) done = False ans = sum(map(int, advent.get_input())) advent.submit_answer(1, ans) seen = set() seen.add(0) ans = 0 while not done: for d in advent.get_input(): ans += int(d) if ans in seen: ans2 = ans done = True break seen.add(ans) advent.submit_answer(2, ans2)