Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Input: Register A: <#>
- # Register B: <#>
- # Register C: <#>
- # <blank line>
- # Program: <#>,<#>,... (all 0 to 7)
- # Output: instruction pointer starts ta start (0), default +2,
- # if goes past end then halts
- # <combo operand>: 0-3 = that value, 4-6 = A-C, 7 = unused
- # 0 <combo operand> -> A = int(A / 2^CO)
- # 1 <literal operand> -> B = xor(B, LO)
- # 2 <CO> -> B = CO % 8
- # 3 <LO> -> if A != 0 then jump to <LO>
- # 4 <ignored> -> B = xor(B, C)
- # 5 <CO> -> output CO % 8
- # multiple outputs separated by commas
- # 6 <CO> -> B = int(A / 2^CO)
- # 7 <CO> -> C = int(C / 2^CO)
- def combo_value():
- if program[pointer + 1] <= 3:
- return program[pointer + 1]
- if program[pointer + 1] == 4:
- return a
- if program[pointer + 1] == 5:
- return b
- if program[pointer + 1] == 6:
- return c
- print ("pointer =", pointer)
- print ("program[pointer + 1] =", program[pointer + 1])
- raise Exception("Invalid combo operand")
- a, b, c = -1, -1, -1
- pointer = 0
- line_count = 0
- file = open("17_input.txt", "r")
- for line in file:
- line = line.replace("\n", "")
- line_count += 1
- if line_count == 1:
- a = int(line.replace("Register A: ", ""))
- if line_count == 2:
- b = int(line.replace("Register B: ", ""))
- if line_count == 3:
- c = int(line.replace("Register C: ", ""))
- if line_count == 5:
- program = list(map(int, line.replace("Program: ", "").split(",")))
- output = ""
- while pointer >= 0 and pointer < len(program):
- if program[pointer] == 0:
- a = int(a / (2 ** combo_value()))
- pointer += 2
- continue
- if program[pointer] == 1:
- b = b ^ program[pointer + 1]
- pointer += 2
- continue
- if program[pointer] == 2:
- b = combo_value() % 8
- pointer += 2
- continue
- if program[pointer] == 3:
- if a == 0:
- pointer += 2
- else:
- pointer = program[pointer + 1]
- continue
- if program[pointer] == 4:
- b = b ^ c
- pointer += 2
- continue
- if program[pointer] == 5:
- output += "," + str(combo_value() % 8)
- pointer += 2
- continue
- if program[pointer] == 6:
- b = int(a / (2 ** combo_value()))
- pointer += 2
- continue
- if program[pointer] == 7:
- c = int(a / (2 ** combo_value()))
- pointer += 2
- continue
- print ("pointer =", pointer)
- print ("program[pointer] =", program[pointer])
- raise Exception("Invalid instruction")
- print (output[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement