expeditaet
Version:
Advent of Code Solutions
73 lines (57 loc) • 1.79 kB
text/typescript
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