Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def aoc16(part = 1):
- thingy = ""
- with open('aoc2116a.txt') as filo:
- thingy = filo.read().rstrip("\n")
- bitlen = len(thingy) * 4
- inval = int(thingy, 16)
- bits = bin(inval)[2:].zfill(bitlen)
- vercount = 0
- packstack = [[0,0,0,0,[]]]
- idleg = ["+", "*", "min", "max", "", ">", "<", "="]
- print(thingy)
- print(bits)
- i = 0
- while i in range(len(bits)):
- ver = int(bits[i:i+3], 2)
- vercount += ver
- id = int(bits[i+3:i+6], 2)
- if id == 4:
- i2 = i+6
- group = "11111"
- totalnum = ""
- while group[0] == "1":
- group = bits[i2:i2+5]
- totalnum += group[1:]
- i2+=5
- value = int(totalnum, 2)
- print("value", value)
- packstack[-1][4].append(value)
- if packstack[-1][0] == "sp":
- packstack[-1][2] += 1
- for pack in packstack:
- if pack[0] == "len":
- pack[2] += i2-i
- while packstack[-1][1] == packstack[-1][2]:
- if packstack[-1][3] == "+":
- packstack[-2][4].append(sum(packstack[-1][4]))
- elif packstack[-1][3] == "*":
- mult = 1
- for va in packstack[-1][4]:
- mult *= va
- packstack[-2][4].append(mult)
- elif packstack[-1][3] == "min":
- packstack[-2][4].append(min(packstack[-1][4]))
- elif packstack[-1][3] == "max":
- packstack[-2][4].append(max(packstack[-1][4]))
- elif packstack[-1][3] == ">":
- packstack[-2][4].append(int(packstack[-1][4][0]>packstack[-1][4][1]))
- elif packstack[-1][3] == "<":
- packstack[-2][4].append(int(packstack[-1][4][0]<packstack[-1][4][1]))
- elif packstack[-1][3] == "=":
- packstack[-2][4].append(int(packstack[-1][4][0]==packstack[-1][4][1]))
- if len(packstack) == 1:
- break
- else:
- packstack.pop()
- i = i2
- else:
- lid = int(bits[i+6], 2)
- if lid == 0:
- for pack in packstack:
- if pack[0] == "len":
- pack[2] += 22
- if packstack[-1][0] == "sp":
- packstack[-1][2] += 1
- packstack.append(["len", int(bits[i+7:i+22], 2), 0, idleg[id], []])
- i += 22
- else:
- for pack in packstack:
- if pack[0] == "len":
- pack[2] += 18
- if packstack[-1][0] == "sp":
- packstack[-1][2] += 1
- packstack.append(["sp", int(bits[i+7:i+18], 2), 0, idleg[id], []])
- i += 18
- print(packstack)
- #print("count", vercount)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement