For a description of this problem, please check the Advent of Code website.
Example Input:
190: 10 193267: 81 40 2783: 17 5156: 15 67290: 6 8 6 15161011: 16 10 13192: 17 8 1421037: 9 7 18 13292: 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)