Skip to content

Commit 0b591e6

Browse files
Update frequency_finder.py
1 parent 774dae8 commit 0b591e6

File tree

1 file changed

+36
-60
lines changed

1 file changed

+36
-60
lines changed

strings/frequency_finder.py

Lines changed: 36 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
# Frequency Finder
22

3+
import string
4+
35
# frequency taken from http://en.wikipedia.org/wiki/Letter_frequency
4-
englishLetterFreq = {
6+
english_letter_freq = {
57
"E": 12.70,
68
"T": 9.06,
79
"A": 8.17,
@@ -33,85 +35,59 @@
3335
LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
3436

3537

36-
def getLetterCount(message):
37-
letterCount = {
38-
"A": 0,
39-
"B": 0,
40-
"C": 0,
41-
"D": 0,
42-
"E": 0,
43-
"F": 0,
44-
"G": 0,
45-
"H": 0,
46-
"I": 0,
47-
"J": 0,
48-
"K": 0,
49-
"L": 0,
50-
"M": 0,
51-
"N": 0,
52-
"O": 0,
53-
"P": 0,
54-
"Q": 0,
55-
"R": 0,
56-
"S": 0,
57-
"T": 0,
58-
"U": 0,
59-
"V": 0,
60-
"W": 0,
61-
"X": 0,
62-
"Y": 0,
63-
"Z": 0,
64-
}
38+
def get_letter_count(message: str) -> dict:
39+
letter_count = {letter: 0 for letter in string.ascii_uppercase}
6540
for letter in message.upper():
6641
if letter in LETTERS:
67-
letterCount[letter] += 1
42+
letter_count[letter] += 1
6843

69-
return letterCount
44+
return letter_count
7045

7146

72-
def getItemAtIndexZero(x):
47+
def get_item_at_index_zero(x: tuple) -> str:
7348
return x[0]
7449

7550

76-
def getFrequencyOrder(message):
77-
letterToFreq = getLetterCount(message)
78-
freqToLetter = {}
51+
def get_frequency_order(message: str) -> str:
52+
letter_to_freq = get_letter_count(message)
53+
freq_to_letter: dict[int, list] = {
54+
freq: [] for letter, freq in letter_to_freq.items()
55+
}
7956
for letter in LETTERS:
80-
if letterToFreq[letter] not in freqToLetter:
81-
freqToLetter[letterToFreq[letter]] = [letter]
82-
else:
83-
freqToLetter[letterToFreq[letter]].append(letter)
57+
freq_to_letter[letter_to_freq[letter]].append(letter)
58+
59+
freq_to_letter_str: dict[int, str] = {}
8460

85-
for freq in freqToLetter:
86-
freqToLetter[freq].sort(key=ETAOIN.find, reverse=True)
87-
freqToLetter[freq] = "".join(freqToLetter[freq])
61+
for freq in freq_to_letter:
62+
freq_to_letter[freq].sort(key=ETAOIN.find, reverse=True)
63+
freq_to_letter_str[freq] = "".join(freq_to_letter[freq])
8864

89-
freqPairs = list(freqToLetter.items())
90-
freqPairs.sort(key=getItemAtIndexZero, reverse=True)
65+
freq_pairs = list(freq_to_letter_str.items())
66+
freq_pairs.sort(key=get_item_at_index_zero, reverse=True)
9167

92-
freqOrder = []
93-
for freqPair in freqPairs:
94-
freqOrder.append(freqPair[1])
68+
freq_order = []
69+
for freq_pair in freq_pairs:
70+
freq_order.append(freq_pair[1])
9571

96-
return "".join(freqOrder)
72+
return "".join(freq_order)
9773

9874

99-
def englishFreqMatchScore(message):
75+
def english_freq_match_score(message: str) -> int:
10076
"""
101-
>>> englishFreqMatchScore('Hello World')
77+
>>> english_freq_match_score('Hello World')
10278
1
10379
"""
104-
freqOrder = getFrequencyOrder(message)
105-
matchScore = 0
106-
for commonLetter in ETAOIN[:6]:
107-
if commonLetter in freqOrder[:6]:
108-
matchScore += 1
80+
freq_order = get_frequency_order(message)
81+
match_score = 0
82+
for common_letter in ETAOIN[:6]:
83+
if common_letter in freq_order[:6]:
84+
match_score += 1
10985

110-
for uncommonLetter in ETAOIN[-6:]:
111-
if uncommonLetter in freqOrder[-6:]:
112-
matchScore += 1
86+
for uncommon_letter in ETAOIN[-6:]:
87+
if uncommon_letter in freq_order[-6:]:
88+
match_score += 1
11389

114-
return matchScore
90+
return match_score
11591

11692

11793
if __name__ == "__main__":

0 commit comments

Comments
 (0)