solution: 2025/5

Signed-off-by: Alix von Schirp <github@avonschirp.bootmedia.de>
This commit is contained in:
2025-12-07 16:37:09 +01:00
parent ad47193543
commit 57f78bc4f6
2 changed files with 72 additions and 0 deletions

28
src/2025/5/1/index.ts Normal file
View File

@@ -0,0 +1,28 @@
export default async function runner(inputPath: string) {
const input = (await Bun.file(inputPath).text()).trimEnd();
let fresh = 0;
const inrange: { min: number, max: number }[] = [];
const [ranges, stored] = input.split("\n\n").map(value => value.trim());
ranges!.split("\n").map(value => value.trim()).filter(value => value !== "").forEach(value => {
const [min, max] = value.split("-").map(value => parseInt(value));
if (!min || !max) return;
inrange.push({min, max})
})
stored!.split("\n").map(value => value.trim()).filter(value => value !== "").map(value => parseInt(value)).forEach(value => {
if (inrange.some(({min, max}) => {
return (min <= value && value <= max);
})) {
fresh++;
}
})
console.log(fresh);
}

44
src/2025/5/2/index.ts Normal file
View File

@@ -0,0 +1,44 @@
export default async function runner(inputPath: string) {
const input = (await Bun.file(inputPath).text()).trimEnd();
let fresh = 0;
const inrange: { min: number, max: number }[] = [];
const [ranges, _stored] = input.split("\n\n").map(value => value.trim());
ranges!.split("\n").map(value => value.trim()).filter(value => value !== "").forEach(value => {
const [min, max] = value.split("-").map(value => parseInt(value));
if (!min || !max) return;
inrange.push({min, max})
})
inrange.sort((a, b) => {
if(a.min !== b.min) return a.min-b.min;
return a.max-b.max;
})
const mergedRanges: {min: number, max: number}[] = [];
inrange.forEach(value => {
if(mergedRanges.length === 0) {
mergedRanges.push(value);
return;
}
if(mergedRanges[mergedRanges.length-1]!.max >= value.min) {
if(mergedRanges[mergedRanges.length-1]!.max < value.max) mergedRanges[mergedRanges.length-1]!.max = value.max
} else {
mergedRanges.push(value)
}
})
mergedRanges.forEach(({min, max}) => {
fresh += max-min+1;
})
console.log(fresh);
}