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