day 5
This commit is contained in:
+22
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
||||
3-5
|
||||
10-14
|
||||
16-20
|
||||
16-19
|
||||
12-18
|
||||
|
||||
|
||||
1
|
||||
5
|
||||
8
|
||||
11
|
||||
17
|
||||
32
|
||||
Reference in New Issue
Block a user