xxxxxxxxxx
54
function simulate_game(starting_numbers, num_turns) {
let last_visited_turn = {}
for (let i = 0; i < starting_numbers.length; i++) {
last_visited_turn[starting_numbers[i]] = i
}
starting_numbers.push(0)
let starting_turn = starting_numbers.length - 1
let next_value = starting_numbers[starting_turn]
let spoken_number = 0
for (let turn = starting_turn; turn < num_turns; turn++) {
spoken_number = next_value
if (last_visited_turn[spoken_number] === undefined) {
next_value = 0
} else {
next_value = turn - last_visited_turn[spoken_number]
}
last_visited_turn[spoken_number] = turn
}
return Object.keys(last_visited_turn).length
}
function simulate_game_2(startingList, limit) {
let lastTurn = {}
let turn = 1
for (let i = 0; i < startingList.length; i++) {
let n = startingList[i];
lastTurn[n] = turn;
turn++;
}
startingList.push(0)
let lastNumber = startingList.slice(-1)[0];
let newNumber = NaN;
while (turn < limit) {
if (lastTurn[lastNumber]) {
newNumber = turn - lastTurn[lastNumber];
lastTurn[lastNumber] = turn;
} else {
lastTurn[lastNumber] = turn;
newNumber = 0;
}
lastNumber = newNumber;
turn++;
}
return lastNumber
}
function setup() {
let start = [6,19,0,5,7,13,1]
print(simulate_game_2(start, 30000000))
}