Exemple #1
0
e.T("""-1
-2
-3""", -6, None)
e.T("""+1
-2
+3
+1""", None, 2)


def part1(input):
    ints = [int(x) for x in input.get_valid_lines()]
    return sum(ints)


e.run_tests(1, part1)
e.run_main(1, part1)


def part2(input):
    ints = [int(x) for x in input.get_valid_lines()]
    c = 0
    s = set()
    while True:
        for x in ints:
            c += x
            if c in s:
                return c
            s.add(c)


e.run_tests(2, part2)
Exemple #2
0
def loop(start, loops):
    v = 1
    for _ in range(loops):
        v = (v * start) % 20201227
    return v


def part1(input):
    ln = input.get_valid_lines()
    A = int(ln[0])
    B = int(ln[1])
    # A = 7 ** n mod 20201227
    # B = 7 ** m mod 20201227
    # 20201227 is prime
    n = get_loop_number(A)
    m = get_loop_number(B)
    print(f"Loop numbers: {n}, {m}")
    return loop(A, m)


e.run_tests(1, part1)
e.run_main(1, part1)


def part2(input):
    pass


# e.run_tests(2, part2)
# e.run_main(2, part2)
Exemple #3
0

def part1_regex(input):
    # Alternative approach with regexes
    #   works well for part 1 but hard to expand for part 2
    gr = input.get_groups()
    rules = gr[0]
    messages = gr[1]
    rule0 = make_rule0_regex_for_pt1(rules)
    r = re.compile(f"^{rule0}$")
    valid = [msg for msg in messages if r.match(msg)]
    return len(valid)


e.run_tests(1, part1_regex)
e.run_main(1, part1_regex)


def replace_rules_for_pt2(nonterm):
    nonterm[8] = [[42], [42, 8]]
    nonterm[11] = [[42, 31], [42, 11, 31]]


def msg_valid(msg, term, nonterm):
    q = deque()
    q.append((0, [0]))
    while q:
        index, rules = q.popleft()
        rule = rules[0]
        if rule in term:
            if msg[index] == term[rule]:
Exemple #4
0
        # then this is the one.
        for i, coords in enumerate(monsters):
            paint_monster(rotated_grid, coords, i)
            frame_blit(12, 12, rotated_grid)
            frame_write()
            frame_write()
            frame_write()
            frame_write()

        # for row in rotated_grid:
        #     print(''.join(row))

        water = sum([row.count('#') for row in rotated_grid])

        global frame
        for rep in range(10):
            for i in range(120):
                for j in range(120):
                    if frame[j][i] == '#':
                        frame[j][i] = '$'
                    elif frame[j][i] == '$':
                        frame[j][i] = '#'
            frame_write()
            frame_write()
        break

    return water


e.run_main(2, part2)