count-pt-bits.py
1 #!/usr/bin/env python 2 3 from collections import Counter 4 5 def count_bits(charset): 6 bits = Counter() 7 total = 0 8 for c in charset: 9 total+=1 10 for i, b in enumerate(f"{c:06b}"): 11 bits[i]+=int(b) 12 for b,v in sorted(bits.items()): 13 print(6-b, v, v / total) 14 15 def str_stats(txt): 16 print(len(txt), txt) 17 count_bits([ord(c) % 0x3f for c in txt] + [0x1f]*(len(txt)%3)) 18 19 #print('all', len(list(range(1,27)) + [ord(x) for x in ' .-,0123456789'] + [0x1f])) 20 #count_bits(list(range(1,27)) + [ord(x) for x in ' .-,0123456789'] + [0x1f]) 21 print('all', len(list(range(1,27)) + [ord(x) for x in ' .-,0123456789'])) 22 count_bits(list(range(1,27)) + [ord(x) for x in ' .-,0123456789']) 23 #print('no numbers') 24 #count_bits(list(range(1,27)) + [ord(x) for x in ' .-,'] + [0x1f]) 25 print('no numbers') 26 count_bits(list(range(1,27)) + [ord(x) for x in ' .-,']) 27 #print('alpha') 28 #count_bits(list(range(1,27)) + [0x1f]) 29 print('alpha') 30 count_bits(list(range(1,27))) 31 32 str_stats("HELLO WORLD") 33 str_stats("NICHTS ZU MELDEN") 34 str_stats("DER FEIND LAUSCHT MIT") 35 36 def forbidden(charset): 37 print('\n'.join([('\t' if c not in charset else '') + f"{c:06b}" for c in range(1,0x40)])) 38 39 forbidden(list(range(1,27)) + [ord(x) for x in ' .-,0123456789'])