コード例 #1
0
def main():
    program = load_input("d13.txt")

    print(f"Part 1: {get_blocks_after_first_run(program)}")

    render = len(sys.argv) > 1 and sys.argv[1] == "-r"
    print(f"Part 2: {play(program, render=render)}")
コード例 #2
0
ファイル: d17.py プロジェクト: mathieu-lemay/aoc-2019-py
def main():
    program = load_input("d17.txt")
    grid = Grid.build(program)

    junctions = grid.get_junctions()
    p1 = sum(j[0] * j[1] for j in junctions)
    print(f"Part 1: {p1}")

    routine, functions = grid.get_dust_routine()

    def encode(data):
        x = [ord(c) for c in list(data)] + [10]
        if len(x) > 20:
            raise ValueError(data)

        return x

    def encode_fn(data):
        fn = []
        elements = data.split(",")
        for e in elements:
            fn.append(e[0])
            fn.append(str(e[1:]))

        return encode(",".join(fn))

    cpu = IntCodeCPU(program)
    cpu.poke(0, 2)
    cpu.run(encode(routine))
    for f in functions:
        cpu.run(encode_fn(f[1]))

    cpu.run(encode("n"))

    print(f"Part 2: {cpu.pop_output()[-1]}")
コード例 #3
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    day = '25'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 6198540
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)
コード例 #4
0
ファイル: test_d14.py プロジェクト: mathieu-lemay/aoc-2019-py
    def test_get_fuel_for_ore(self):
        test_params = (
            (
                """157 ORE => 5 NZVS
                165 ORE => 6 DCFZ
                44 XJWVT, 5 KHKGT, 1 QDVJ, 29 NZVS, 9 GPVTF, 48 HKGWZ => 1 FUEL
                12 HKGWZ, 1 GPVTF, 8 PSHF => 9 QDVJ
                179 ORE => 7 PSHF
                177 ORE => 5 HKGWZ
                7 DCFZ, 7 PSHF => 2 XJWVT
                165 ORE => 2 GPVTF
                3 DCFZ, 7 NZVS, 5 HKGWZ, 10 PSHF => 8 KHKGT""",
                82892753,
            ),
            (
                """2 VPVL, 7 FWMGM, 2 CXFTF, 11 MNCFX => 1 STKFG
                17 NVRVD, 3 JNWZP => 8 VPVL
                53 STKFG, 6 MNCFX, 46 VJHF, 81 HVMC, 68 CXFTF, 25 GNMV => 1 FUEL
                22 VJHF, 37 MNCFX => 5 FWMGM
                139 ORE => 4 NVRVD
                144 ORE => 7 JNWZP
                5 MNCFX, 7 RFSQX, 2 FWMGM, 2 VPVL, 19 CXFTF => 3 HVMC
                5 VJHF, 7 MNCFX, 9 VPVL, 37 CXFTF => 6 GNMV
                145 ORE => 6 MNCFX
                1 NVRVD => 8 CXFTF
                1 VJHF, 6 MNCFX => 4 RFSQX
                176 ORE => 6 VJHF""",
                5586022,
            ),
            (
                """171 ORE => 8 CNZTR
                7 ZLQW, 3 BMBT, 9 XCVML, 26 XMNCP, 1 WPTQ, 2 MZWV, 1 RJRHP => 4 PLWSL
                114 ORE => 4 BHXH
                14 VRPVC => 6 BMBT
                6 BHXH, 18 KTJDG, 12 WPTQ, 7 PLWSL, 31 FHTLT, 37 ZDVW => 1 FUEL
                6 WPTQ, 2 BMBT, 8 ZLQW, 18 KTJDG, 1 XMNCP, 6 MZWV, 1 RJRHP => 6 FHTLT
                15 XDBXC, 2 LTCX, 1 VRPVC => 6 ZLQW
                13 WPTQ, 10 LTCX, 3 RJRHP, 14 XMNCP, 2 MZWV, 1 ZLQW => 1 ZDVW
                5 BMBT => 4 WPTQ
                189 ORE => 9 KTJDG
                1 MZWV, 17 XDBXC, 3 XCVML => 2 XMNCP
                12 VRPVC, 27 CNZTR => 2 XDBXC
                15 KTJDG, 12 BHXH => 5 XCVML
                3 BHXH, 2 VRPVC => 7 MZWV
                121 ORE => 7 VRPVC
                7 XCVML => 6 RJRHP
                5 BHXH, 4 VRPVC => 5 LTCX""",
                460664,
            ),
            (load_input("d14.txt"), 1330066),
        )

        for i, (reactions, expected) in enumerate(test_params):
            with self.subTest(n=i, expected=expected):
                reactions = parse_reactions(reactions.split("\n"))
                self.assertEqual(
                    expected, get_fuel_for_ore(reactions, 1_000_000_000_000))
コード例 #5
0
def main():
    program = load_input("d11.txt")

    panels = run_robot(program, (0, 0), Color.BLACK)

    print(f"Part 1: {len([p for p in panels.values() if p.painted])}")

    panels = run_robot(program, (0, 0), Color.WHITE)

    print("Part 2:")
    render_panels(panels)
コード例 #6
0
def run_real():
    lines = utils.load_input()  # loads ./input.txt

    print("--- Day 5 p.1 ---")
    exp1 = 901
    res1 = solve_p1(lines)
    print("D.1: {} {} {}".format(res1 == exp1, exp1, res1))

    print("--- Day 5 p.2 ---")
    exp2 = 661
    res2 = solve_p2(lines)
    print("D.2: {} {} {}".format(res2 == exp2, exp2, res2))
コード例 #7
0
def main():
    program = load_input("d09.txt")

    _t = ts()
    p1 = get_boost_keycode(program)
    _t = ts() - _t
    print(f"Part 1: {p1} ({_t:.3f}s)")

    _t = ts()
    p2 = get_coords(program)
    _t = ts() - _t
    print(f"Part 2: {p2} ({_t:.3f}s)")
コード例 #8
0
def main():
    program = load_input("d07.txt")

    p1 = max(
        get_thruster_output(program, ps)
        for ps in itertools.permutations(range(5)))
    print(f"Part 1: {p1}")

    p2 = max(
        get_thruster_output_with_feedback(program, ps)
        for ps in itertools.permutations(range(5, 10)))
    print(f"Part 2: {p2}")
コード例 #9
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    lines = utils.load_input()

    print("--- Day 2 p.1 ---")
    exp1 = 542
    res1 = solve(lines, is_valid_p1)
    print(exp1 == res1, exp1, res1)

    print("--- Day 2 p.2 ---")
    exp2 = 360
    res2 = solve(lines, is_valid_p2)
    print(exp2 == res2, exp2, res2)
コード例 #10
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    inputs = [int(ln) for ln in utils.load_input()]

    print("--- Task 1 p.1 ---")
    exp1 = 539851
    res1 = solve_p1(inputs, 2020)
    print(res1 == exp1, exp1, res1)

    print("--- Task 1 p.2 ---")
    exp2 = 212481360
    res2 = solve_p2(inputs, 2020)
    print(res2 == exp2, exp2, res2)
コード例 #11
0
def run_real():
    day = '06'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 6596
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 3219
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #12
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2015
def run_real():
    day = '01'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 138
    res1 = solve_p1(lines[0])
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 1771
    res2 = solve_p2(lines[0])
    print(exp2 == res2, exp2, res2)
コード例 #13
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2015
def run_real():
    day = '14'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 2660
    res1 = solve_p1(lines, 2503)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 1256
    res2 = solve_p2(lines, 2503)
    print(exp2 == res2, exp2, res2)
コード例 #14
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2015
def run_real():
    day = '24'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 10439961859
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 72050269
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #15
0
def run_real():
    day = '14'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 6513443633260
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 3442819875191
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #16
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2015
def run_real():
    day = '02'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 1598415
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 3812909
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #17
0
def run_real():
    day = '09'
    lines = utils.to_numbers(utils.load_input())

    print(f"--- Day {day} p.1 ---")
    exp1 = 88311122
    res1 = solve_p1(lines)
    print(exp1 == res1[1], exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 13549369
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #18
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    day = '22'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 33421
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 33651
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #19
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    day = '10'
    lines = utils.to_numbers(utils.load_input())

    print(f"--- Day {day} p.1 ---")
    exp1 = 1700
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 12401793332096
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #20
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2015
def run_real():
    day = '18'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 1061
    res1 = solve_p1(lines, 100)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 1006
    res2 = solve_p2(lines, 100)
    print(exp2 == res2, exp2, res2)
コード例 #21
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    day = '11'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 2418
    res1 = solve_p1(WaitingArea.from_lines(lines))
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 2144
    res2 = solve_p2(WaitingArea.from_lines(lines))
    print(exp2 == res2, exp2, res2)
コード例 #22
0
def run_real():
    day = '21'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 2374
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 'fbtqkzc,jbbsjh,cpttmnv,ccrbr,tdmqcl,vnjxjg,nlph,mzqjxq'
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #23
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    day = '20'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 83775126454273
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 1993
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #24
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    day = '18'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 31142189909908
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 323912478287549
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #25
0
def run_real():
    day = '07'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 16076
    res1 = solve_p1(lines, 'a')
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 2797
    res2 = solve_p2(lines, 'a')
    print(exp2 == res2, exp2, res2)
コード例 #26
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    day = 'DD'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 112
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 6260
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #27
0
def run_real():
    day = '15'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 21367368
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 1766400
    res2 = solve_p2(lines)
    print(exp2 == res2, exp2, res2)
コード例 #28
0
ファイル: solution.py プロジェクト: nkrot/adventofcode-2020
def run_real():
    day = '08'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 2014
    res1 = solve_p1(Command.from_lines(lines))
    print(exp1 == res1[0], exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 2251
    res2 = solve_p2(Command.from_lines(lines))
    print(exp2 == res2, exp2, res2)
コード例 #29
0
def run_real():
    day = '16'
    lines = utils.load_input()
    profile = AuntSue.from_line(" ".join(['Sue -1'] + text_1.split('\n')))

    print(f"--- Day {day} p.1 ---")
    exp1 = 103
    res1 = solve_p1(lines, profile)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 405
    res2 = solve_p2(lines, profile)
    print(exp2 == res2, exp2, res2)
コード例 #30
0
def run_real():
    day = '13'
    lines = utils.load_input()

    print(f"--- Day {day} p.1 ---")
    exp1 = 171
    res1 = solve_p1(lines)
    print(exp1 == res1, exp1, res1)

    print(f"--- Day {day} p.2 ---")
    exp2 = 539746751134958
    # start_at = 100000000000000
    start_at = 0
    res2 = solve_p2(lines, start_at)
    print(exp2 == res2, exp2, res2)