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)}")
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]}")
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)
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))
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)
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))
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)")
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}")
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)