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])