1
0
Fork 0

2020 day 15

This commit is contained in:
Lucidiot 2020-12-15 06:17:54 +01:00
parent 503ecd1c04
commit b283b337e9
Signed by: lucidiot
GPG Key ID: 3358C1CA6906FB8D
2 changed files with 36 additions and 1 deletions

35
2020/15/day15.lua Normal file
View File

@ -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)

View File

@ -25,7 +25,7 @@ is acceptable; anything goes as long as I solve it myself!
12 ██ ██ ██
13 ██ █
14 ██ ██ ██
15 ██
15 ██ ██
16 ██ ██
17 ██
18 ██