index.js (2122B)
1 #!/usr/bin/env node 2 3 const fs = require('node:fs'); 4 5 const ranges = fs 6 .readFileSync('input', 'utf-8') 7 .split('\r\n').join(',') 8 .split('\r').join(',') 9 .split('\n').join(',') 10 .split(',') 11 .map(str => str.trim()) 12 .filter(str => str) 13 14 const totalPart1 = []; 15 const totalPart2 = []; 16 17 // Part 1 solution 18 for(const range of ranges) { 19 let [start, end] = range.split('-'); 20 start = parseInt(start, 10); 21 end = parseInt(end , 10); 22 const rangePart1Invalid = []; 23 for( 24 let current = start; 25 current <= end; 26 current++ 27 ) { 28 const stringified = current.toString(10); 29 const halves = [ 30 stringified.slice(0, stringified.length / 2), 31 stringified.slice(stringified.length / 2), 32 ]; 33 if (halves[0] === halves[1]) { 34 rangePart1Invalid.push(current); 35 } 36 } 37 process.stdout.write(`${range} has ${rangePart1Invalid.length} invalid IDs: ${rangePart1Invalid.join(', ')}\n`); 38 totalPart1.push(...rangePart1Invalid); 39 } 40 41 const part1 = totalPart1.reduce((r,a) => r+a, 0); 42 process.stdout.write('\n\n'); 43 44 // Part 2 solution 45 for(const range of ranges) { 46 let [start, end] = range.split('-'); 47 start = parseInt(start, 10); 48 end = parseInt(end , 10); 49 const rangePart2Invalid = []; 50 for( 51 let current = start; 52 current <= end; 53 current++ 54 ) { 55 const stringified = current.toString(10); 56 57 for(let sublength = 1 ; sublength <= (stringified.length / 2) ; sublength++) { 58 59 // Not integer-divisible = not composite of substring 60 if (stringified.length % sublength) continue; 61 let repetitions = stringified.length / sublength; 62 63 if (stringified.slice(0, sublength).repeat(repetitions) === stringified) { 64 rangePart2Invalid.push(current); 65 break; 66 } 67 68 } 69 70 } 71 process.stdout.write(`${range} has ${rangePart2Invalid.length} invalid IDs: ${rangePart2Invalid.join(', ')}\n`); 72 totalPart2.push(...rangePart2Invalid); 73 } 74 75 const part2 = totalPart2.reduce((r,a) => r+a, 0); 76 process.stdout.write('\n\n'); 77 78 79 process.stdout.write(`------[ Part 1: ${part1} ]------\n`); 80 process.stdout.write(`------[ Part 2: ${part2} ]------\n\n`);