1 changed files with 63 additions and 0 deletions
@ -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") |
||||
|
|
Loading…
Reference in new issue