const input = "0,8,15,2,12,1,4"; // const input = "3,1,2"; const numberAt2020 = 30000000; // const numbers = input.split(',').map(parseInt); // does not work const numbers = input.split(',').map(a => parseInt(a)); const numberAge = new Map(); numbers.forEach((e, i) => numberAge.set(e, i)); let currentNumber = 0; // initial numbers are unique let nextNumber: number; let count = numbers.length; do { if (numberAge.has(currentNumber)) { // @ts-ignore nextNumber = count - numberAge.get(currentNumber); numberAge.set(currentNumber, count); } else { nextNumber = 0; numberAge.set(currentNumber, count); } count += 1; if (count < numberAt2020) { currentNumber = nextNumber; } } while (count < numberAt2020); const endTime = new Date(); console.log(currentNumber);