33 lines
855 B
TypeScript
33 lines
855 B
TypeScript
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<number, number>();
|
|
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);
|