56 lines
1.3 KiB
TypeScript
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) |