Ejemplo n.º 1
0
Archivo: day21.py Proyecto: oabm/aoc
            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)
Ejemplo n.º 2
0
Archivo: day03.py Proyecto: oabm/aoc
            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)
Ejemplo n.º 3
0
Archivo: day05.py Proyecto: oabm/aoc
    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
Ejemplo n.º 4
0
#!/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)