Quentin Ménoret

Posted on

# Advent of code - Day 9

Are you participating in the Advent of code this year?

If you don't know what the advent of code is, it's a website where you'll find a daily challenge (every day it gets harder). It's a really fun event, you should participate!

I try to solve the exercises using either JavaScript or TypeScript and will share my solutions daily (with one day delay so no one can cheat!). I only share the solution for the second part.

Day 9 felt surprisingly not as scary as day 8. Maybe I'm just getting better?
Here is my solution for day #9:

``````function resolve(code, offset) {
for (let i = offset; i < code.length; i++) {
const currentNumber = code[i];
const possibleNumbers = code.slice(i - offset, i);
const ok = possibleNumbers.some((firstNumber) =>
possibleNumbers.some(
(secondNumber) =>
firstNumber + secondNumber === currentNumber &&
firstNumber !== secondNumber
)
);
if (!ok) return currentNumber;
}
}

function findMinMax(code, offset) {
const invalidNumber = resolve(code, offset);
for (let i = 0; i < code.length; i++) {
let total = 0;
for (let j = i; j < code.length; j++) {
// Since the input is sorted, we just need to traverse
// and make the sum until we find one that matches
total += code[j];
if (total < invalidNumber) continue;
if (total > invalidNumber) break;
const range = code.slice(i, j + 1);
return Math.min(...range) + Math.max(...range);
}
}
}

findMinMax(input)
``````