diff --git a/2024/22/index.ts b/2024/22/index.ts new file mode 100644 index 0000000..6c12590 --- /dev/null +++ b/2024/22/index.ts @@ -0,0 +1,59 @@ +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 } = {}; + +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); \ No newline at end of file diff --git a/2024/23/index.ts b/2024/23/index.ts new file mode 100644 index 0000000..561564b --- /dev/null +++ b/2024/23/index.ts @@ -0,0 +1,30 @@ +const fs = require('fs'); + +const input = fs.readFileSync(__dirname + '/input.txt', 'utf8'); + +const connections: { [key: string]: Array }= {}; + +input.split("\n").forEach((conn: string) => { + const [c1, c2] = conn.split('-'); + connections[c1] = [c2, ...(connections[c1] || [])] + connections[c2] = [c1, ...(connections[c2] || [])] +}); + +const tCs = new Set; + +for (let key in connections) { + const conns = connections[key]; + if (key.startsWith('t')) { + conns.forEach((c2) => { + connections[c2].forEach((c3) => { + if (connections[c3].includes(key)) { + const arr = [key, c2, c3]; + arr.sort(); + tCs.add(arr.join(',')); + } + }) + }) + } +} + +console.log(tCs, tCs.size); \ No newline at end of file