diff --git a/2023/Day 1/part2_first_attempt.js b/2023/Day 1/part2_first_attempt.js new file mode 100644 index 0000000..8dd73a0 --- /dev/null +++ b/2023/Day 1/part2_first_attempt.js @@ -0,0 +1,55 @@ +#!/usr/bin/env node + + +var inputstring = require('fs').readFileSync('input.txt','utf8'); + +var regs = [/zero/g,/one/g,/two/g,/three/g,/four/g,/five/g,/six/g,/seven/g,/eight/g,/nine/g]; + +var lines = inputstring.split('\n').filter(i=>i); +var minNumerical = '0'.charCodeAt(0); +var maxNumerical = '9'.charCodeAt(0); + +function convertline(line) { + for(var i in regs) { + line = line.replace(regs[i],`${i}`); + } + return line; +} + +function greedyconvertline(line) { + if(line.length<3) return line; + for(var scopelength=3;scopelength<=line.length;++scopelength) { + var first = line.substr(0,scopelength); + var second = line.substr(scopelength); + var newline = convertline(first)+second; + var diff=0; + if(newline.length!=line.length) { + diff=(line.length-newline.length); + } + //console.log({line,scopelength,first,second,newline,diff}) + scopelength-=diff; + line=newline; + } + return line; +} +lines = lines.map(greedyconvertline); +//console.log({lines}); + +function onlynumerical(str) { + return str.split('').map(i=>i.charCodeAt(0)).filter(i=>(i>=minNumerical && i<=maxNumerical)).map(i=>i-48); +} +function firstandlast(arr) { + return [arr[0],arr[arr.length-1]]; +} +var nums = lines.map(i=>{ + var nums = firstandlast(onlynumerical(i)); + //console.log({nums}); + return nums[0]*10+nums[1]; +}); +//console.log({nums}); + +var sum=0; +for(var i of nums) { + sum+=i; +} +console.log(sum); \ No newline at end of file