DEV Community

Viper
Viper

Posted on • Updated on

 

Advent of Code 2020: Python Solution Day 8

I know I can not be on even top 1000 but I love to solve challenges. Lets share your solution too. And the solution to day 8 is not that harder but kind of brute force has to be done. Link to the challenge is here. I have updated my notebook at this repository.

with open("day8.txt", "r") as fp:
    lines = fp.readlines()
    lines = [line.rstrip() for line in lines]
# print(lines)

# challenge 1
def challenge1(lines):
    curr_acc = 0
    visited_line = set()
    curr_line = 0
    valid_sol = True
    while True: 

        # viewed all lines and we got lucky, no loops
        if len(lines)-1 == curr_line:
            valid_sol = False

        # for challenge 1 solution
        if curr_line in visited_line:
            valid_sol = False
            return curr_acc, valid_sol


        inst, acc = lines[curr_line].split(" ")
        acc = int(acc)
        visited_line.add(curr_line)

        if inst == "nop":
            curr_line += 1
        if inst == "acc":
            curr_acc += acc
            curr_line += 1 
        if inst == "jmp":
            curr_line+=acc

        # we got lucky
        if valid_sol == False:
            return curr_acc, True 
    return curr_acc, False
print("Current Accumulator: ", challenge1(lines)[0])

# challenge 2
def challenge2(lines):
    curr_acc = 0
    visited_line = []
    curr_line = 0
    new_lines = lines.copy()
    for curr_line in range(1, len(new_lines)):   
        inst, acc = lines[curr_line].split(" ")
        acc = int(acc)

        if inst == "nop":
            inst = "jmp"
        elif inst == "jmp":
            inst = "nop"

        visited_line = []
        new_lines = lines.copy()
        new_lines[curr_line] = " ".join((inst, str(acc)))
        acc, valid = challenge1(new_lines)
        if valid:
            return acc

print("Current Accumulator: ", challenge2(lines))    
Enter fullscreen mode Exit fullscreen mode

I write blogs about Computer Vision projects on my GitHub page q-viper.github.io and if you got some time please share yours too.

Top comments (2)

Collapse
 
r0f1 profile image
Florian Rohrer

Found a very similar solution:
github.com/r0f1/adventofcode2020/b...

Collapse
 
qviper profile image
Viper

I never learned how to write shorter codes. Thanks for sharing. Your solution is neat.

An Animated Guide to Node.js Event Loop

Node.js doesn’t stop from running other operations because of Libuv, a C++ library responsible for the event loop and asynchronously handling tasks such as network requests, DNS resolution, file system operations, data encryption, etc.

What happens under the hood when Node.js works on tasks such as database queries? We will explore it by following this piece of code step by step.