code for generating tex output for friedman test
This commit is contained in:
parent
3b1b03c338
commit
657a447733
83
code/friedman.py
Normal file
83
code/friedman.py
Normal file
|
@ -0,0 +1,83 @@
|
|||
f = open('frost_cipher.txt')
|
||||
cipher = f.readlines()
|
||||
cipher = [c.strip('\n').split(' ') for c in cipher]
|
||||
|
||||
clean = ''
|
||||
for c in cipher:
|
||||
clean += "".join(c)
|
||||
# print("".join(c))
|
||||
ciphertext = clean.upper()
|
||||
|
||||
|
||||
colors = ['red', 'blue', 'darkgreen', 'orange', 'black', 'yellow']
|
||||
|
||||
width = 110
|
||||
blocknum = 4
|
||||
blocks = ["" for i in range(0,blocknum)]
|
||||
output0 = "\\texttt{"
|
||||
output1 = "\\texttt{"
|
||||
|
||||
for i in range(len(ciphertext)):
|
||||
output0 += ciphertext[i]
|
||||
|
||||
for j in range(blocknum):
|
||||
if i % blocknum == j:
|
||||
output1 += "\\textcolor{" + colors[j] + "}{" + ciphertext[i] + "}"
|
||||
|
||||
blocks[i%blocknum] += ciphertext[i]
|
||||
|
||||
if (i+1)%width == 0:
|
||||
output0 += '\n'
|
||||
output1 += '\n'
|
||||
|
||||
output0 += "}"
|
||||
output1 += "}"
|
||||
|
||||
f0 = open('friedman_0.tex', 'w')
|
||||
f0.write(output0)
|
||||
f0.close()
|
||||
|
||||
f1 = open('friedman_{}.tex'.format(blocknum), 'w')
|
||||
f1.write(output1)
|
||||
f1.close()
|
||||
|
||||
def compute_coincidence(text):
|
||||
letter_count = {}
|
||||
letters = [chr(i) for i in range(ord('A'), ord('Z')+1)]
|
||||
|
||||
for c in letters:
|
||||
letter_count[c] = 0
|
||||
|
||||
for c in text:
|
||||
if c in letter_count.keys():
|
||||
letter_count[c] += 1
|
||||
|
||||
N = len(text)
|
||||
s = 0
|
||||
for n_i in letter_count.values():
|
||||
s += n_i * (n_i - 1)
|
||||
kappa = float(s) / (N * (N - 1))
|
||||
print("kappa_o = ", kappa)
|
||||
return kappa
|
||||
|
||||
|
||||
def output_block(block, color, width=20):
|
||||
output = "\\texttt{\\textcolor{" + color + "}{"
|
||||
for i in range(len(block)):
|
||||
output += block[i]
|
||||
if (i+1)%width == 0:
|
||||
output += '\n'
|
||||
|
||||
output += "}}"
|
||||
|
||||
kappa = compute_coincidence(blocks[j])
|
||||
output += "\\textcolor{"+color+"}{$$" + "\\kappa_o = {:6.4f}".format(kappa) + "$$}"
|
||||
print(output)
|
||||
|
||||
f = open('friedman_{}_'.format(blocknum) + color + '.tex', 'w')
|
||||
f.write(output)
|
||||
f.close()
|
||||
|
||||
for j in range(blocknum):
|
||||
output_block(blocks[j], colors[j])
|
||||
|
19
code/frost_cipher.txt
Normal file
19
code/frost_cipher.txt
Normal file
|
@ -0,0 +1,19 @@
|
|||
Ync jhfug vbavfyxi zb s rjczgp bfcv
|
||||
Tsu ggkwp W uhzcr fhy kfsojc pgmm
|
||||
Rbv uj fbw mwrjweji zggl Z glhtu
|
||||
Ofw qfccxi ucog tes sl krf sl N tcmei
|
||||
Kc oajis am gvbl bs kvw nsusjzwfkla
|
||||
Yysf mtfy laj fhzxw rg bnxk ok yfzf
|
||||
Sgi yonbsx dwkmrdk mmv pwmyvf uefza
|
||||
Txhrikx nk ksl liokld rbv pfehww bvoj
|
||||
Mmfiya fj tgk yyol mmv dslxzby mmvfw
|
||||
Sgi scla yyol ftibagl vemtqcm dtd
|
||||
Zb dxfmsk gt jhwi mrr lkturwg gcoud
|
||||
Ty W cxuk hzx kzfkm kff sgtkvwk irm
|
||||
Qxy bbgpneu zhb noq ejrrk hs kc otd
|
||||
Z rgngksv bk Z gzhzcr woji qgfj soud
|
||||
N jvseq ss lxqcwfz yywk pnkv s lnxv
|
||||
Khrvkzxwv oyxx rbv tlvg zxsts
|
||||
Lpt icswx uwnxwxsv bs r kghi rbv B
|
||||
N kcgd yys ggj cskl yionxqvr tr
|
||||
Fer lafk vsl rrrw tqc hzx iztxxwvbux
|
Loading…
Reference in New Issue
Block a user