This commit is contained in:
2025-12-05 10:23:09 +01:00
parent d1e6ac0b74
commit f21c8a0ba7
5 changed files with 1401 additions and 54 deletions
+22
View File
@@ -0,0 +1,22 @@
import fs from 'node:fs';
const file = fs.readFileSync('./2025/inputs/5').toString();
const [strRanges, strIngredients] = file.split("\n\n").map(e => e.split("\n"))
const ingredients = strIngredients.map(Number)
const ranges = strRanges.map(e => {
const [min, max] = e.split("-")
return [Number(min), Number(max)]
})
let count = 0
for (const i of ingredients) {
const fresh = ranges.some(([min, max]: number[]) => {
return (i >= min && max >= i)
})
if (fresh) {
count++
}
}
console.log(count)
+65
View File
@@ -0,0 +1,65 @@
// 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 (minR && maxR) {
if (minR != maxR) {
validRanges.splice(validRanges.indexOf(minR), 1)
}
validRanges.splice(validRanges.indexOf(maxR), 1)
maxR[0] = Math.min(r[0], minR[0], maxR[0])
maxR[1] = Math.max(r[1], minR[1], maxR[1])
return mergeRange(maxR, 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)
+1186
View File
File diff suppressed because it is too large Load Diff
+13
View File
@@ -0,0 +1,13 @@
3-5
10-14
16-20
16-19
12-18
1
5
8
11
17
32