Files
2025-12-06 10:01:26 +01:00

56 lines
1.3 KiB
TypeScript

// DISCLAIMER : DOES NOT WORKS
import fs from 'node:fs';
const file = fs.readFileSync('./2025/inputs/5').toString();
const [strRanges, _] = file.split("\n\n").map(e => e.split("\n"))
const ranges = strRanges.map(e => {
const [min, max] = e.split("-")
return [Number(min), Number(max)]
})
const t = ranges.find(r => r[0] > r[1])
console.log(t)
function mergeRange(r: number[], validRanges: number[][]) {
const minR = isInRange(r[0], validRanges)
const maxR = isInRange(r[1], validRanges)
if (maxR) {
validRanges.splice(validRanges.indexOf(maxR), 1)
maxR[0] = Math.min(maxR[0], r[0])
return mergeRange(maxR, validRanges)
}
if (minR) {
validRanges.splice(validRanges.indexOf(minR), 1)
minR[1] = Math.max(minR[1], r[1])
return mergeRange(minR, validRanges)
}
validRanges.push(r)
}
const validRanges: number[][] = []
for (const r of ranges) {
mergeRange(r, validRanges)
}
const result = validRanges.reduce((acc, [min, max]) => {
return acc + (max - min) + 1
}, 0)
const testRanges: number[][] = []
for (const r of validRanges) {
mergeRange(r, testRanges)
}
console.log(validRanges.toString() == testRanges.toString())
function isInRange(i: number, r: number[][]) {
return r.find(([min, max]: number[]) => {
return (i >= min && max >= i)
})
}
console.log(result)