day14
This commit is contained in:
parent
e3694fd28f
commit
fac9376175
58
day14.py
Normal file
58
day14.py
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
from aoc import AOCDay
|
||||||
|
from math import ceil
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
test_solutions_p1 = [165, 13312, 180697, 2210736]
|
||||||
|
test_solutions_p2 = [82892753, 5586022, 460664]
|
||||||
|
conversions = {}
|
||||||
|
rest = {}
|
||||||
|
|
||||||
|
def buildConversionDict(self):
|
||||||
|
self.rest = {}
|
||||||
|
conv_input = self.getInputAsArraySplit(" => ")
|
||||||
|
|
||||||
|
for need_str, give_str in conv_input:
|
||||||
|
tar_amt, tar = give_str.split()
|
||||||
|
self.conversions[tar] = {'amount': int(tar_amt), 'need': {}}
|
||||||
|
|
||||||
|
for r in need_str.split(", "):
|
||||||
|
a, n = r.split()
|
||||||
|
self.conversions[tar]['need'][n] = int(a)
|
||||||
|
|
||||||
|
def getOreNeed(self, what: str, amount: int) -> int:
|
||||||
|
amount -= self.rest.get(what, 0)
|
||||||
|
if amount < 0:
|
||||||
|
self.rest[what] = abs(amount)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if what == 'ORE':
|
||||||
|
return amount
|
||||||
|
|
||||||
|
ore_need = 0
|
||||||
|
count = ceil(amount / self.conversions[what]['amount'])
|
||||||
|
for need, need_amt in self.conversions[what]['need'].items():
|
||||||
|
ore_need += self.getOreNeed(need, need_amt * count)
|
||||||
|
|
||||||
|
self.rest[what] = self.conversions[what]['amount'] * count - amount
|
||||||
|
|
||||||
|
return ore_need
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
self.buildConversionDict()
|
||||||
|
return self.getOreNeed('FUEL', 1)
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
self.buildConversionDict()
|
||||||
|
got_ore = 1_000_000_000_000
|
||||||
|
min_fuel = got_ore // self.getOreNeed('FUEL', 1)
|
||||||
|
factor = 100_000
|
||||||
|
while factor >= 1:
|
||||||
|
ore_need = self.getOreNeed('FUEL', min_fuel + factor)
|
||||||
|
if ore_need > got_ore:
|
||||||
|
factor //= 10
|
||||||
|
else:
|
||||||
|
min_fuel += factor
|
||||||
|
|
||||||
|
return min_fuel if self.getOreNeed('FUEL', min_fuel) < got_ore else min_fuel - 1
|
||||||
60
inputs/input14
Normal file
60
inputs/input14
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
2 LFPRM, 4 GPNQ => 2 VGZVD
|
||||||
|
1 KXFHM, 14 SJLP => 8 MGRTM
|
||||||
|
2 HBXVT, 3 HNHC, 5 BDLV => 1 DKTW
|
||||||
|
2 MGRTM, 8 RVTB => 4 DFMW
|
||||||
|
2 SJLP => 9 PXTS
|
||||||
|
1 NXBG => 6 FXBXZ
|
||||||
|
32 LPSQ => 9 GSDXD
|
||||||
|
13 LZGTR => 4 ZRMJ
|
||||||
|
1 FTPQ, 16 CPCS => 5 HNHC
|
||||||
|
2 THQH, 2 NDJG, 5 MSKT => 4 LRZV
|
||||||
|
2 BDLV, 9 HBXVT, 21 NXBG => 7 PLRK
|
||||||
|
16 LNSKQ, 41 KXFHM, 1 DKTW, 1 NCPSZ, 3 ZCSB, 11 MGRTM, 19 WNJWP, 11 KRBG => 1 FUEL
|
||||||
|
5 FTPQ, 1 HBXVT => 4 BDLV
|
||||||
|
15 LSDX, 1 GFJW, 1 QDHJT => 4 NKHQV
|
||||||
|
9 CZHTP, 1 FRPTK => 6 SNBS
|
||||||
|
17 LFLVS, 2 WCFT => 8 KGJQ
|
||||||
|
6 CMHLP => 1 SJLP
|
||||||
|
144 ORE => 3 KQKXZ
|
||||||
|
3 GFJW, 1 RVTB, 1 GPNQ => 2 NXBG
|
||||||
|
4 BDLV => 5 CMHLP
|
||||||
|
2 LSDX => 1 LZGTR
|
||||||
|
156 ORE => 3 NDJG
|
||||||
|
136 ORE => 8 MSKT
|
||||||
|
4 BDLV, 1 NKHQV, 1 RVTB => 7 LNSKQ
|
||||||
|
1 LRZV, 3 WCFT => 2 HBXVT
|
||||||
|
5 KGJQ, 1 SWBSN => 7 QHFX
|
||||||
|
2 DQHBG => 4 LPSQ
|
||||||
|
6 GSDXD => 3 LSDX
|
||||||
|
11 RWLD, 3 BNKVZ, 4 PXTS, 3 XTRQC, 5 LSDX, 5 LMHL, 36 MGRTM => 4 ZCSB
|
||||||
|
8 CPCS => 2 FRPTK
|
||||||
|
5 NDJG => 3 WCFT
|
||||||
|
1 GDQG, 1 QHFX => 4 KXFHM
|
||||||
|
160 ORE => 3 THQH
|
||||||
|
20 GFJW, 2 DQHBG => 6 RVTB
|
||||||
|
2 FXBXZ, 1 WNJWP, 1 VGZVD => 5 RWLD
|
||||||
|
3 DQHBG => 7 SWBSN
|
||||||
|
7 QHFX => 8 CPCS
|
||||||
|
14 HBXVT => 3 VCDW
|
||||||
|
5 FRPTK => 7 NGDX
|
||||||
|
1 HWFQ => 4 LFLVS
|
||||||
|
2 CPCS => 6 ZTKSW
|
||||||
|
9 KGJQ, 8 ZTKSW, 13 BDLV => 6 GDQG
|
||||||
|
13 LMHL, 1 LZGTR, 18 BNKVZ, 11 VCDW, 9 DFMW, 11 FTPQ, 3 RWLD => 4 KRBG
|
||||||
|
1 XRCH => 7 GPNQ
|
||||||
|
3 WCFT => 9 DQHBG
|
||||||
|
1 FTPQ => 8 CZHTP
|
||||||
|
1 PBMR, 2 ZTKSW => 2 BNKVZ
|
||||||
|
2 PLRK, 3 CPCS => 8 ZSGBG
|
||||||
|
3 NGDX, 3 XRCH => 6 XTRQC
|
||||||
|
6 ZTKSW, 11 HNHC, 22 SNBS => 9 WNJWP
|
||||||
|
5 KQKXZ => 8 HWFQ
|
||||||
|
23 WCFT => 7 PBMR
|
||||||
|
1 LRZV, 1 QDHJT => 2 GFJW
|
||||||
|
1 ZSGBG, 5 CGTHV, 9 ZRMJ => 3 LMHL
|
||||||
|
1 DQHBG => 9 XRCH
|
||||||
|
1 GDQG, 17 RWLD, 2 KGJQ, 8 VCDW, 2 BNKVZ, 2 WNJWP, 1 VGZVD => 3 NCPSZ
|
||||||
|
19 SJLP, 3 ZTKSW, 1 CZHTP => 4 LFPRM
|
||||||
|
14 SNBS => 8 CGTHV
|
||||||
|
3 DQHBG, 4 WCFT => 1 FTPQ
|
||||||
|
3 MSKT, 3 NDJG => 5 QDHJT
|
||||||
7
inputs/test_input14_1_0
Normal file
7
inputs/test_input14_1_0
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
9 ORE => 2 A
|
||||||
|
8 ORE => 3 B
|
||||||
|
7 ORE => 5 C
|
||||||
|
3 A, 4 B => 1 AB
|
||||||
|
5 B, 7 C => 1 BC
|
||||||
|
4 C, 1 A => 1 CA
|
||||||
|
2 AB, 3 BC, 4 CA => 1 FUEL
|
||||||
9
inputs/test_input14_1_1
Normal file
9
inputs/test_input14_1_1
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
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
|
||||||
12
inputs/test_input14_1_2
Normal file
12
inputs/test_input14_1_2
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
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
|
||||||
17
inputs/test_input14_1_3
Normal file
17
inputs/test_input14_1_3
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
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
|
||||||
9
inputs/test_input14_2_0
Normal file
9
inputs/test_input14_2_0
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
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
|
||||||
12
inputs/test_input14_2_1
Normal file
12
inputs/test_input14_2_1
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
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
|
||||||
17
inputs/test_input14_2_2
Normal file
17
inputs/test_input14_2_2
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
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
|
||||||
Loading…
Reference in New Issue
Block a user