Solution for day 15 that doesn't work bc i'm dumb
This commit is contained in:
1 parent
0608b23e2a
commit
ee409dc842
1 file changed
+63
Executable
+63
@@ -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")
|
||||
|
||||
Reference in new issue
Block a user