import math
import re
def mostFrequent(List): ##Useful later on
return max(set(List), key = List.count)
def listToString(s): ##Useful later on
str1 = " "
return (str1.join(s))
Alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] ##Generally needed
Alphabet2 = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] ##Needed to avoid problems with the .index function
ST = [] ##SecretText
Key = [] ##Key used to encode with the Vigènere Cipher
PT = [] ##PublicText
tmp = [] ##Temporary list to analyse frequency of occurence of letters
def main(file, Keylength):
with open(file, 'r') as f:
text = f.read().strip().split()
len_chars = sum(len(word) for word in text) ##len_chars needed for future loops
with open(file) as fileobj:
for line in fileobj:
for ch in line:
ST.append(ch) ##SecretText into list
for i in range(0, Keylength):
for i in range(i, len_chars, Keylength):
tmp.append(ST[i]) ##every i-th char decoded with the same letter in the Key
diff = Alphabet.index(mostFrequent(tmp)) - Alphabet.index("E") ##standard frequency of occurence analysis
Key.append(Alphabet[diff])
del tmp[:]
n = 0
i = 0
while i < len_chars:
if n < Keylength:
a = Alphabet.index(Key[n])
b = Alphabet.index(ST[i])
c = b - a
d = c % 26
PT.append(Alphabet2[d]) ##Reversing Vigenère
n += 1
i += 1
else:
n -= 5
print(listToString(PT))
Easy Math Editor
This discussion board is a place to discuss our Daily Challenges and the math and science related to those challenges. Explanations are more than just a solution — they should explain the steps and thinking strategies that you used to obtain the solution. Comments should further the discussion of math and science.
When posting on Brilliant:
*italics*
or_italics_
**bold**
or__bold__
paragraph 1
paragraph 2
[example link](https://brilliant.org)
> This is a quote
\(
...\)
or\[
...\]
to ensure proper formatting.2 \times 3
2^{34}
a_{i-1}
\frac{2}{3}
\sqrt{2}
\sum_{i=1}^3
\sin \theta
\boxed{123}
Comments
ahah Nice one :D