mid-kid
5 years ago
2 changed files with 111 additions and 0 deletions
@ -0,0 +1,52 @@ |
|||||
|
recipes = {} |
||||
|
|
||||
|
for line in io.lines(arg[1]) do |
||||
|
input, output = line:match("(.-) *=> *(.+)") |
||||
|
quant, name = output:match("(%d+) +(.+)") |
||||
|
recipe = {quant=tonumber(quant), ingres={}} |
||||
|
for quant, ingre in input:gmatch("(%d+) +(%a+),? *") do |
||||
|
recipe.ingres[ingre] = quant |
||||
|
end |
||||
|
recipes[name] = recipe |
||||
|
end |
||||
|
|
||||
|
recipes.ORE = {quant=0, ingres={}} |
||||
|
|
||||
|
function get_ore(fuel) |
||||
|
local wanted = {FUEL=fuel} |
||||
|
while true do |
||||
|
for name, _ in pairs(wanted) do |
||||
|
if name ~= "ORE" then |
||||
|
recipe = recipes[name] |
||||
|
if wanted[name] > 0 then |
||||
|
amount = wanted[name] // recipe.quant |
||||
|
if wanted[name] % recipe.quant > 0 then |
||||
|
amount = amount + 1 |
||||
|
end |
||||
|
for ingre, ingre_quant in pairs(recipe.ingres) do |
||||
|
if not wanted[ingre] then |
||||
|
wanted[ingre] = 0 |
||||
|
end |
||||
|
wanted[ingre] = wanted[ingre] + ingre_quant * amount |
||||
|
end |
||||
|
wanted[name] = wanted[name] - recipe.quant * amount |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
if wanted["ORE"] then |
||||
|
count = 0 |
||||
|
for x, y in pairs(wanted) do if 0 < y then count = count + 1 end end |
||||
|
if count == 1 then |
||||
|
return wanted["ORE"] |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
-- Manual brute forcing is actually doable, funnily enough |
||||
|
ore = get_ore(tonumber(arg[2])) |
||||
|
print(ore) |
||||
|
if ore > 1000000000000 then |
||||
|
print("Ding!") |
||||
|
end |
@ -0,0 +1,59 @@ |
|||||
|
180 ORE => 9 DQFL |
||||
|
3 HGCR, 9 TKRT => 8 ZBLC |
||||
|
1 MZQLG, 12 RPLCK, 8 PDTP => 8 VCFX |
||||
|
3 ZBLC, 19 VFZX => 1 SJQL |
||||
|
1 CRPGK => 4 TPRT |
||||
|
7 HGCR, 4 TGCW, 1 VFZX => 9 JBPHS |
||||
|
8 GJHX => 4 NSDBV |
||||
|
1 VFTG => 2 QNWD |
||||
|
1 WDKW, 2 DWRH, 6 VNMV, 2 HFHL, 55 GJHX, 4 NSDBV, 15 KLJMS, 17 KZDJ => 1 FUEL |
||||
|
2 JHSJ, 15 JNWJ, 1 ZMFXQ => 4 GVRK |
||||
|
1 PJFBD => 3 MZQLG |
||||
|
1 SJQL, 11 LPVWN => 9 DLZS |
||||
|
3 PRMJ, 2 XNWV => 6 JHSJ |
||||
|
4 SJQL => 8 PJFBD |
||||
|
14 QNWD => 6 STHQ |
||||
|
5 CNLFV, 2 VFTG => 9 XNWV |
||||
|
17 LWNKB, 6 KBWF, 3 PLSCB => 8 KZDJ |
||||
|
6 LHWZQ, 5 LWNKB => 3 ZDWX |
||||
|
5 RPLCK, 2 LPVWN => 8 ZMFXQ |
||||
|
1 QNWD, 2 TKRT => 3 CRPGK |
||||
|
1 JBPHS, 1 XNWV => 6 TLRST |
||||
|
21 ZDWX, 3 FZDP, 4 CRPGK => 6 PDTP |
||||
|
1 JCVP => 1 WXDVT |
||||
|
2 CRPGK => 9 FGVL |
||||
|
4 DQFL, 2 VNMV => 1 HGCR |
||||
|
2 GVRK, 2 VCFX, 3 PJFBD, 1 PLSCB, 23 FZDP, 22 PCSM, 1 JLVQ => 6 HFHL |
||||
|
1 CRPGK, 5 PJFBD, 4 XTCP => 8 PLSCB |
||||
|
1 HTZW, 17 FGVL => 3 LHWZQ |
||||
|
2 KBWF => 4 DQKLC |
||||
|
2 LHWZQ => 2 PRMJ |
||||
|
2 DLZS, 2 VCFX, 15 PDTP, 14 ZDWX, 35 NBZC, 20 JVMF, 1 BGWMS => 3 DWRH |
||||
|
2 TKVCX, 6 RPLCK, 2 HTZW => 4 XTCP |
||||
|
8 CNLFV, 1 NRSD, 1 VFTG => 9 VFZX |
||||
|
1 TLRST => 4 WDKW |
||||
|
9 VFCZG => 7 GJHX |
||||
|
4 FZDP => 8 JLVQ |
||||
|
2 ZMFXQ, 2 STHQ => 6 QDZB |
||||
|
2 SJQL, 8 ZDWX, 6 LPRL, 6 WXDVT, 1 TPRT, 1 JNWJ => 8 KLJMS |
||||
|
6 JBPHS, 2 ZBLC => 6 HTZW |
||||
|
1 PDTP, 2 LHWZQ => 8 JNWJ |
||||
|
8 ZBLC => 7 TKVCX |
||||
|
2 WDKW, 31 QDZB => 4 PCSM |
||||
|
15 GJHX, 5 TKVCX => 7 FZDP |
||||
|
15 SJQL, 3 PRMJ => 4 JCVP |
||||
|
31 CNLFV => 1 TGCW |
||||
|
1 TLRST, 2 WDKW => 9 KBWF |
||||
|
102 ORE => 7 VNMV |
||||
|
103 ORE => 5 CNLFV |
||||
|
163 ORE => 2 VFTG |
||||
|
5 NRSD, 1 STHQ => 3 VFCZG |
||||
|
16 LPVWN, 13 KBWF => 2 BGWMS |
||||
|
5 BGWMS, 11 SJQL, 9 FZDP => 6 NBZC |
||||
|
175 ORE => 7 NRSD |
||||
|
5 HTZW => 4 LPVWN |
||||
|
4 PRMJ => 7 JVMF |
||||
|
6 PCSM, 8 DQKLC => 7 LPRL |
||||
|
2 CNLFV => 7 TKRT |
||||
|
3 FZDP => 3 LWNKB |
||||
|
1 HTZW => 4 RPLCK |
Loading…
Reference in new issue