advent-of-code

Entries to advent of code, multiple years
git clone git://git.finwo.net/misc/advent-of-code
Log | Files | Refs

commit af593b517b9ab70e87e6f987cb9ca13b23d0c437
parent 1a8e4c43e5637684036883f481ca802341bb5ba2
Author: finwo <finwo@pm.me>
Date:   Wed, 24 Dec 2025 18:57:42 +0100

2025-05 full solve thanks to devgod2020

Diffstat:
M2025/05/index.js | 32++++++++++++++++++++------------
A2025/05/reference.js | 47+++++++++++++++++++++++++++++++++++++++++++++++
A2025/05/test.txt | 8++++++++
3 files changed, 75 insertions(+), 12 deletions(-)

diff --git a/2025/05/index.js b/2025/05/index.js @@ -22,23 +22,26 @@ const queries = rawQueries ; const compositeRanges = ranges.map(range => ({...range})); + for(let i = 0; i < compositeRanges.length; i++) { const range = compositeRanges[i]; // Find the first range this low one matches const foundLow = compositeRanges.find(({start,end}) => { - if (range.start < start) return false; - if (range.start > end ) return false; - return true; + if (start <= range.start && range.start <= end) return true; + if (start <= range.end && range.end <= end) return true; + if (range.start <= start && start <= range.end) return true; + if (range.start <= end && end <= range.end) return true; + return false; }); const foundLowIndex = compositeRanges.indexOf(foundLow); // Merge with low range if (i !== foundLowIndex) { - process.stdout.write(`Merging ${foundLow.start}-${foundLow.end},${range.start}-${range.end} => `); + // process.stdout.write(`Merging ${foundLow.start}-${foundLow.end},${range.start}-${range.end} => `); range.start = foundLow.start < range.start ? foundLow.start : range.start; range.end = foundLow.end > range.end ? foundLow.end : range.end ; - process.stdout.write(`${range.start}-${range.end}\n`); + // process.stdout.write(`${range.start}-${range.end}\n`); compositeRanges.splice(foundLowIndex, 1); i = -1; continue; @@ -46,9 +49,11 @@ for(let i = 0; i < compositeRanges.length; i++) { // Find the first range this high one matches const foundHigh = compositeRanges.find(({start,end}) => { - if (range.end < start) return false; - if (range.end > end ) return false; - return true; + if (start <= range.start && range.start <= end) return true; + if (start <= range.end && range.end <= end) return true; + if (range.start <= start && start <= range.end) return true; + if (range.start <= end && end <= range.end) return true; + return false; }); const foundHighIndex = compositeRanges.indexOf(foundHigh); @@ -73,11 +78,14 @@ const part1 = queries .length; const part2 = compositeRanges - .map(range => `${range.start}-${range.end} => ${range.end - range.start + 1n}`) - // .map(range => (range.end - range.start + 1n)) - // .reduce((r,a) => r+a, 0n) + // .map(range => `${range.start}-${range.end} => ${range.end - range.start + 1n}`) + .map(range => (range.end - range.start + 1n)) + .reduce((r,a) => r+a, 0n) + +console.log(compositeRanges.map(range => `${range.start}-${range.end} => ${range.end - range.start + 1n}`)); +console.log(compositeRanges.find(range => range.start > range.end)); -console.log(part2.join('\n')); +// console.log(part2.join('\n')); process.stdout.write(`------[ Part 1: ${part1} ]------\n`); process.stdout.write(`------[ Part 2: ${part2} ]------\n`); diff --git a/2025/05/reference.js b/2025/05/reference.js @@ -0,0 +1,47 @@ +// Origin: https://github.com/DEVGOD2020/competitiveProgramming/blob/main/AdventOfCode/problems/2025/day5/2025-day5.js + +let inputs = require('fs').readFileSync('input','utf8').split(/\r?\n\s/); + +let input1 = inputs[0].split(/\r?\n/).map( (el)=> el.split("-").map( (el)=>Number(el) ) ); +let input2 = inputs[1].split(/\r?\n/).map( (el)=> Number(el) ); + +let events = []; + +for(let [start,end] of input1){ + events.push([start,1]); + events.push([end+1,-1]); +} + +events.sort( (a,b)=> a[0] - b[0]); + +let part1 = function(){ + let fresh = 0; + for(let ID of input2){ + let overlap = 0; + for(let I = 0; I<events.length; I++){ + let [time,type] = events[I]; + if(time > ID){break;} + overlap += type; + } + if(overlap > 0){fresh++;} + } + console.log(fresh); +} + +let part2 = function(){ + let score = 0; + let overlap = 0; + let prev = events[0][0]; + for(let I = 0; I<events.length; I++){ + let [time,type] = events[I]; + overlap += type; + if(overlap == 0){ + score += time-prev; + prev = events[I+1]?.[0]||0; + } + } + console.log(score); +} + +part1(); +part2(); diff --git a/2025/05/test.txt b/2025/05/test.txt @@ -0,0 +1,8 @@ +1-1 +2-2 +3-3 +1-3 + +1 +2 +3