diff --git a/src/2025/5/1/index.ts b/src/2025/5/1/index.ts new file mode 100644 index 0000000..aa64be5 --- /dev/null +++ b/src/2025/5/1/index.ts @@ -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); +} diff --git a/src/2025/5/2/index.ts b/src/2025/5/2/index.ts new file mode 100644 index 0000000..e935043 --- /dev/null +++ b/src/2025/5/2/index.ts @@ -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); +}