Advertisement
Guest User

Untitled

a guest
Dec 16th, 2021
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.09 KB | None | 0 0
  1. def aoc16(part = 1):
  2.     thingy = ""
  3.     with open('aoc2116a.txt') as filo:
  4.         thingy = filo.read().rstrip("\n")
  5.    
  6.     bitlen = len(thingy) * 4
  7.    
  8.     inval = int(thingy, 16)
  9.     bits = bin(inval)[2:].zfill(bitlen)
  10.     vercount = 0
  11.    
  12.     packstack = [[0,0,0,0,[]]]
  13.     idleg = ["+", "*", "min", "max", "", ">", "<", "="]
  14.    
  15.     print(thingy)
  16.     print(bits)
  17.     i = 0
  18.     while i in range(len(bits)):
  19.         ver = int(bits[i:i+3], 2)
  20.         vercount += ver
  21.         id = int(bits[i+3:i+6], 2)
  22.         if id == 4:
  23.             i2 = i+6
  24.             group = "11111"
  25.             totalnum = ""
  26.             while group[0] == "1":
  27.                 group = bits[i2:i2+5]
  28.                 totalnum += group[1:]
  29.                 i2+=5
  30.             value = int(totalnum, 2)
  31.             print("value", value)
  32.             packstack[-1][4].append(value)
  33.             if packstack[-1][0] == "sp":
  34.                 packstack[-1][2] += 1
  35.             for pack in packstack:
  36.                 if pack[0] == "len":
  37.                     pack[2] += i2-i
  38.                 while packstack[-1][1] == packstack[-1][2]:
  39.                     if packstack[-1][3] == "+":
  40.                         packstack[-2][4].append(sum(packstack[-1][4]))
  41.                     elif packstack[-1][3] == "*":
  42.                         mult = 1
  43.                         for va in packstack[-1][4]:
  44.                             mult *= va
  45.                         packstack[-2][4].append(mult)
  46.                     elif packstack[-1][3] == "min":
  47.                         packstack[-2][4].append(min(packstack[-1][4]))
  48.                     elif packstack[-1][3] == "max":
  49.                         packstack[-2][4].append(max(packstack[-1][4]))
  50.                     elif packstack[-1][3] == ">":
  51.                         packstack[-2][4].append(int(packstack[-1][4][0]>packstack[-1][4][1]))
  52.                     elif packstack[-1][3] == "<":
  53.                         packstack[-2][4].append(int(packstack[-1][4][0]<packstack[-1][4][1]))
  54.                     elif packstack[-1][3] == "=":
  55.                         packstack[-2][4].append(int(packstack[-1][4][0]==packstack[-1][4][1]))
  56.                     if len(packstack) == 1:
  57.                         break
  58.                     else:
  59.                         packstack.pop()
  60.             i = i2
  61.         else:
  62.             lid = int(bits[i+6], 2)
  63.             if lid == 0:
  64.                 for pack in packstack:
  65.                     if pack[0] == "len":
  66.                         pack[2] += 22
  67.                 if packstack[-1][0] == "sp":
  68.                     packstack[-1][2] += 1
  69.                 packstack.append(["len", int(bits[i+7:i+22], 2), 0, idleg[id], []])
  70.                 i += 22
  71.                
  72.             else:
  73.                 for pack in packstack:
  74.                     if pack[0] == "len":
  75.                         pack[2] += 18
  76.                 if packstack[-1][0] == "sp":
  77.                     packstack[-1][2] += 1
  78.                 packstack.append(["sp", int(bits[i+7:i+18], 2), 0, idleg[id], []])
  79.                 i += 18
  80.         print(packstack)
  81.        
  82.         #print("count", vercount)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement