/ analysis / count-pt-bits.py
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'])