For a description of this problem, please check the Advent of Code website.
Example Input:
47|5397|1397|6197|4775|2961|1375|5329|1397|2953|2961|5397|5361|2947|1375|4797|7547|6175|6147|2975|1353|1375,47,61,53,2997,61,53,29,1375,29,1375,97,47,61,5361,13,2997,13,75,29,47
Part 1 Solution:
const fs = require('fs');const data = fs.readFileSync('./input.txt', 'utf8');let [rules, updates] = data.split('\n\r\n')rules = rules.split('\n').map(rule => {return rule.split('|').map(Number)})updates = updates.split('\n').map(update => {return update.split(',').map(Number)})function check(update) {return rules.every(rule => {if(update.includes(rule[0]) && update.includes(rule[1])) {return update.indexOf(rule[0]) < update.indexOf(rule[1])}return true})}let sum = 0;updates.forEach(update => {if(check(update)) {sum += update[Math.floor(update.length/2)]}})console.log(sum)
Part 2 Solution:
const fs = require('fs');const data = fs.readFileSync('./input.txt', 'utf8');let [rules, updates] = data.split('\n\r\n')rules = rules.split('\n').map(rule => {return rule.split('|').map(Number)})updates = updates.split('\n').map(update => {return update.split(',').map(Number)})function check(update) {return rules.every(rule => {if(update.includes(rule[0]) && update.includes(rule[1])) {return update.indexOf(rule[0]) < update.indexOf(rule[1])}return true})}function sort(update) {return update.sort((a, b) => {let rule = rules.find((r) => r.includes(a) && r.includes(b));return rule.indexOf(a) - rule.indexOf(b);})}let sum = 0;updates.forEach(update => {if(!check(update)) {sort(update)sum += update[Math.floor(update.length/2)]}})console.log(sum)