AOC Solutions

For a description of this problem, please check the Advent of Code website.

Example Input:

190: 10 19
3267: 81 40 27
83: 17 5
156: 15 6
7290: 6 8 6 15
161011: 16 10 13
192: 17 8 14
21037: 9 7 18 13
292: 11 6 16 20

Part 1 Solution:

const fs = require('fs');
const lines = fs.readFileSync('./example-input.txt', 'utf8').trim().split("\n");
let sum = 0;
function checkMatch(value, numbers) {
value = Number(value);
function evaluate(current, remaining) {
if (remaining.length === 0) {
return current === value;
}
const [next, ...rest] = remaining;
return (
evaluate(current + next, rest) ||
evaluate(current * next, rest)
);
}
const [first, ...rest] = numbers;
return evaluate(first, rest);
}
lines.forEach(line => {
const value = line.split(':')[0];
const numbers = line.split(':')[1].trim().split(' ').map(Number)
if(checkMatch(value, numbers)) {
sum += Number(value);
}
})
console.log(sum)

Part 2 Solution:

const fs = require('fs');
const lines = fs.readFileSync('./example-input.txt', 'utf8').trim().split("\n");
let sum = 0;
function checkMatch(value, numbers) {
value = Number(value)
function evaluate(current, remaining) {
if (remaining.length === 0) {
return current === value;
}
const [next, ...rest] = remaining;
return (
evaluate(Number(current + next), rest) ||
evaluate(Number(current) + Number(next), rest) ||
evaluate(Number(current) * Number(next), rest)
);
}
const [first, ...rest] = numbers;
return evaluate(first, rest);
}
lines.forEach(line => {
const value = line.split(':')[0];
const numbers = line.split(':')[1].trim().split(' ')
if(checkMatch(value, numbers)) {
sum += Number(value);
}
})
console.log(sum)