From ee409dc842eaced6f54274ab3273cbbe43feb609 Mon Sep 17 00:00:00 2001 From: Maya Herrscher Date: Thu, 16 Dec 2021 12:46:56 +0100 Subject: [PATCH] Solution for day 15 that doesn't work bc i'm dumb --- AoC2021/AoC16.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 AoC2021/AoC16.py diff --git a/AoC2021/AoC16.py b/AoC2021/AoC16.py new file mode 100755 index 0000000..716a2f8 --- /dev/null +++ b/AoC2021/AoC16.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 + +import sys +from bitstring import BitArray + + +def parse_packet(packet, s, np=100000000, length=1000000000): + print(s, np, length) + nex = s + end = s+length-1 + bv = 0 + while np > 0 and nex < min(len(packet)+1,end): + if (len(packet[nex:end+1]) == 0 or int(''.join(packet[nex:end+1]),2) == 0 or int(''.join(packet[nex:]),2) == 0): + if length < 1000000000: + nex = end+1 + break + v = int(''.join(packet[nex:nex+3]),2) + bv += v + t = int(''.join(packet[nex+3:nex+6]),2) + print(v,t) + nex += 6 + if t == 4: + num = [] + while (n := packet[nex]) == '1': + num.append(list(packet[nex+1:nex+5])) + nex += 5 + num.append(list(packet[nex+1:nex+5])) + nex += 5 + i = int(''.join([''.join(n) for n in num]),2) + print("num: " + str(i)) + nex += (nex-s+1) % 4 + s = nex + else: + I = packet[nex] + nex += 1 + if I == '1': + l = int(''.join(packet[nex:nex+11]),2) + nex += 11 + b, nex = parse_packet(packet, nex, np=l) + bv += b + elif I == '0': + l = int(''.join(packet[nex:nex+15]),2) + nex += 15 + b, nex = parse_packet(packet, nex, length=l) + bv += b + np -= 1 + return bv, nex + +if __name__ == '__main__': + hexa = [list(line.strip('\n')) for line in open(sys.argv[1])] + bits = [list(BitArray(hex=c).bin) for c in hexa[0]] + bits = [b for l in bits for b in l] + + print(bits, len(bits)) + bv = parse_packet(bits,0,np=1) + # challenge 1 + res1 = str(bv) + print("challenge 1:" + "\n" + res1 + "\n") + + # challenge 2 + res2 = "" + print("challenge 2:" + "\n" + res2 + "\n") +