DEV Community

loading...

Advent of Code 2020: Python Solution Day 15

qviper profile image Viper ・1 min read

Now elves are causing our system to heat up. First part was easy because we only had to loop until 2021 but the second part is insanely huge. First I used normal dictionary and list for first part. And speed was not a problem for first part. But for second part, time we need is 14,851.485 more than for the first part. So after scrolling more and more reddit threads, I knew defaultdict and deque is the best option.

Part 1 and 2

from collections import *
def day15(filename, turns):
    with open(filename) as fp:
        lines = [l.rstrip() for l in fp.readlines()]
        lines = [int(l) for l in lines[0].split(",")]

    num_to_speak = lines[-1]
    turn_num = defaultdict(deque)

    for v, k in enumerate(lines):
        turn_num[k].append(v+1)

    turn = len(lines)+1
    while turn<=turns:
        l = len(turn_num[num_to_speak]) 
        if l>1:
            num_to_speak = turn_num[num_to_speak][-1] - turn_num[num_to_speak][-2]
            turn_num[num_to_speak].append(turn)
        elif l==1:
            num_to_speak = 0
            turn_num[num_to_speak].append(turn)
        else:
            num_to_speak = 0
            turn_num[num_to_speak].append(turn)

        turn+=1
    print(num_to_speak)

day15("day15.txt", 2020)
day15("day15.txt", 30000000)
Enter fullscreen mode Exit fullscreen mode

Please share your solution too.

Discussion (4)

pic
Editor guide
Collapse
rozbrajaczpoziomow profile image
rozbrajaczpoziomow • Edited

day is lowercase in the name ;-;

Collapse
qviper profile image
Viper Author

Thanks for letting me know.🙂

Collapse
rozbrajaczpoziomow profile image
rozbrajaczpoziomow

And also, if you look at the arguments of day15, it takes filename as an argument, but the actual filename is hardcoded to "day15.txt"

Thread Thread
qviper profile image
Viper Author

Yeah. It happened when i copied all codes and made a method to wrap it. Thank you. I corrected it now.