solution: 2025/5
Signed-off-by: Alix von Schirp <github@avonschirp.bootmedia.de>
This commit is contained in:
28
src/2025/5/1/index.ts
Normal file
28
src/2025/5/1/index.ts
Normal 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
44
src/2025/5/2/index.ts
Normal 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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user