Files
AoC/2024/22/index.ts

59 lines
1.5 KiB
TypeScript
Raw Permalink Normal View History

2024-12-23 10:52:00 +00:00
const fs = require('fs');
const input = fs.readFileSync(__dirname + '/input.txt', 'utf8');
function createSecret(secret: bigint) {
secret = ((secret << 6n) ^ secret) % 16777216n;
secret = ((secret >> 5n) ^ secret) % 16777216n;
return ((secret << 11n) ^ secret) % 16777216n;
}
let sum = 0n;
const changeMap: { [key: string]: Array<number> } = {};
input.split("\n").forEach((s: string, index: number) => {
let seed = BigInt(parseInt(s));
let seedStr = ''+seed;
const changes = [];
for (let i = 0; i < 2000; i++) {
const newSeed = createSecret(seed);
const newSeedStr = ''+newSeed;
const lastDig = parseInt(newSeedStr[newSeedStr.length - 1]);
const diff = lastDig - parseInt(seedStr[seedStr.length - 1]);
changes.push(diff);
if (i > 3) {
changes.shift();
const key = changes.join(',');
if (!changeMap[key]) {
changeMap[key] = [];
}
if (!changeMap[key][index]) {
changeMap[key][index] = lastDig;
}
}
seed = newSeed;
seedStr = newSeedStr;
}
sum += seed;
});
let highest: null|number = null;
let highestSeq: null|string = null;
for (let seq in changeMap) {
const prices = changeMap[seq];
let priceSum = 0;
prices.forEach((p) => {
if (p) {
priceSum += p;
}
});
if (!highest || priceSum > highest) {
highest = priceSum;
highestSeq = seq;
}
}
console.log(sum, highest, highestSeq);