UNPKG

expeditaet

Version:
73 lines (57 loc) 1.79 kB
import { task } from '@alexaegis/advent-of-code-lib'; import packageJson from '../package.json'; import { parse } from './parse.js'; import type { Reaction } from './reaction.class.js'; import { MainResource } from './resource.type.js'; export const p2 = (input: string): number | undefined => { const reactions = parse(input); const fuelReact = reactions.find((r) => r.to === (MainResource.FUEL as string)); for (const r of reactions) { for (const [pre, q] of reactions .filter((pre) => r.from.has(pre.to)) // eslint-disable-next-line @typescript-eslint/no-non-null-assertion .map((pre) => [pre, r.from.get(pre.to)!])) { r.preceeding.add([pre as Reaction, q as number]); } } let cargo = 1_000_000_000_000; const surplus = new Map<string, number>(); // surplus.set('ORE', cargo); // const asd = calcOreForSurplus(surplus, reactions); // console.log('', asd); if (fuelReact) { console.log(fuelReact.to); // return rex.oreCost(surplus); let i = 0; let s = 0; let lf = 0; while (i === 0 || surplus.size > 0) { lf = fuelReact.oreCost(surplus); s += lf; i++; if (i % 1000 === 0) { console.log(i, surplus.size, lf); } } // i--; // s -= lf; const lel = Math.floor(cargo / s); console.log('i:', i, s, lel); cargo -= lel * s; i *= lel; while (cargo > 0) { const fc = fuelReact.oreCost(surplus); s += fc; cargo -= fc; i++; } console.log(lel * s); console.log(lel); return i - 1; // 82892753 // console.log('Ore: ', oreReacts[0].toString(), 'COST: ', oreReacts[0].oreCost()); // console.log('Ore: ', rex.toString(), 'COST: ', rex.oreCost(surplus)); // console.log('Cost: ', fuelReact.indirectCost()); } return undefined; }; await task(p2, packageJson.aoc, 'example.5.txt'); // 165 ~0ms