Advertisement
Guest User

Untitled

a guest
Dec 17th, 2024
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.47 KB | None | 0 0
  1. # Input: Register A: <#>
  2. #        Register B: <#>
  3. #        Register C: <#>
  4. #        <blank line>
  5. #        Program: <#>,<#>,... (all 0 to 7)
  6. # Output: instruction pointer starts ta start (0), default +2,
  7. #           if goes past end then halts
  8. #         <combo operand>: 0-3 = that value, 4-6 = A-C, 7 = unused
  9. #         0 <combo operand> -> A = int(A / 2^CO)
  10. #         1 <literal operand> -> B = xor(B, LO)
  11. #         2 <CO> -> B = CO % 8
  12. #         3 <LO> -> if A != 0 then jump to <LO>
  13. #         4 <ignored> -> B = xor(B, C)
  14. #         5 <CO> -> output CO % 8
  15. #           multiple outputs separated by commas
  16. #         6 <CO> -> B = int(A / 2^CO)
  17. #         7 <CO> -> C = int(C / 2^CO)
  18.  
  19. def combo_value():
  20.   if program[pointer + 1] <= 3:
  21.     return program[pointer + 1]
  22.   if program[pointer + 1] == 4:
  23.     return a
  24.   if program[pointer + 1] == 5:
  25.     return b
  26.   if program[pointer + 1] == 6:
  27.     return c
  28.   print ("pointer =", pointer)
  29.   print ("program[pointer + 1] =", program[pointer + 1])
  30.   raise Exception("Invalid combo operand")
  31.  
  32. a, b, c = -1, -1, -1
  33. pointer = 0
  34.  
  35. line_count = 0
  36. file = open("17_input.txt", "r")
  37. for line in file:
  38.   line = line.replace("\n", "")
  39.   line_count += 1
  40.   if line_count == 1:
  41.     a = int(line.replace("Register A: ", ""))
  42.   if line_count == 2:
  43.     b = int(line.replace("Register B: ", ""))
  44.   if line_count == 3:
  45.     c = int(line.replace("Register C: ", ""))
  46.   if line_count == 5:
  47.     program = list(map(int, line.replace("Program: ", "").split(",")))
  48.  
  49. output = ""
  50. while pointer >= 0 and pointer < len(program):
  51.   if program[pointer] == 0:
  52.     a = int(a / (2 ** combo_value()))
  53.     pointer += 2
  54.     continue
  55.   if program[pointer] == 1:
  56.     b = b ^ program[pointer + 1]
  57.     pointer += 2
  58.     continue
  59.   if program[pointer] == 2:
  60.     b = combo_value() % 8
  61.     pointer += 2
  62.     continue
  63.   if program[pointer] == 3:
  64.     if a == 0:
  65.       pointer += 2
  66.     else:
  67.       pointer = program[pointer + 1]
  68.     continue
  69.   if program[pointer] == 4:
  70.     b = b ^ c
  71.     pointer += 2
  72.     continue
  73.   if program[pointer] == 5:
  74.     output += "," + str(combo_value() % 8)
  75.     pointer += 2
  76.     continue
  77.   if program[pointer] == 6:
  78.     b = int(a / (2 ** combo_value()))
  79.     pointer += 2
  80.     continue
  81.   if program[pointer] == 7:
  82.     c = int(a / (2 ** combo_value()))
  83.     pointer += 2
  84.     continue
  85.   print ("pointer =", pointer)
  86.   print ("program[pointer] =", program[pointer])
  87.   raise Exception("Invalid instruction")
  88.  
  89. print (output[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement