2020 day 15
This commit is contained in:
parent
503ecd1c04
commit
b283b337e9
|
@ -0,0 +1,35 @@
|
|||
-- Maps numbers to their spoken turns
|
||||
local numbers = {}
|
||||
local turn, last_number = 1, nil
|
||||
|
||||
-- Starting numbers
|
||||
for number in io.read("l"):gmatch("(%d+)") do
|
||||
last_number = tonumber(number)
|
||||
numbers[last_number] = {turn}
|
||||
turn = turn + 1
|
||||
end
|
||||
|
||||
local function do_turn()
|
||||
if numbers[last_number] and #numbers[last_number] > 1 then
|
||||
last_number = numbers[last_number][#numbers[last_number]] - numbers[last_number][#numbers[last_number] - 1]
|
||||
else
|
||||
last_number = 0
|
||||
end
|
||||
if numbers[last_number] then
|
||||
table.insert(numbers[last_number], turn)
|
||||
else
|
||||
numbers[last_number] = {turn}
|
||||
end
|
||||
turn = turn + 1
|
||||
end
|
||||
|
||||
while turn <= 2020 do
|
||||
do_turn()
|
||||
end
|
||||
print(last_number)
|
||||
|
||||
-- Part 2 takes a few seconds, which is not slow enough to be worth optimizing.
|
||||
while turn <= 30000000 do
|
||||
do_turn()
|
||||
end
|
||||
print(last_number)
|
Loading…
Reference in New Issue