DEV Community


Advent of Code 2020: Python Solution Day 8

qviper profile image Viper Updated on ・1 min read

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)

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

        # 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 and if you got some time please share yours too.

Discussion (2)

Editor guide
r0f1 profile image
qviper profile image
Viper Author

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