#!/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);