Skip to content

Added 2 new algorythms (decrypt message, censor) #5883

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 24 commits into from
Closed
Show file tree
Hide file tree
Changes from 22 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions maths/average_welford.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
def average_welford(values: list) -> float:
"""
>>> average_welford([1, 2, 3, 4, 5])
3.0
>>> average_welford([1.2329435, 2.209462409, 3.230925, 4.47626462, 5.2938759204])
3.2886942898799996
>>> average_welford([-57386462.2329435, 2246262.209462409, 4632463.230925, 856737354.47626462, -243664265.2938759204])
112513070.4779665
"""
avg = 0.0
"""while looping through the list,
we calculate the average of the
current element and the average
of the elements before it"""
for index in range(0, len(values)):
avg += (values[index]-avg)/(index+1)
return avg

if __name__ == "__main__":
import doctest
doctest.testmod()
26 changes: 26 additions & 0 deletions strings/censor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
def censor(txt: str, word: str) -> str:
"""
>>> censor("one two three", "one")
*** two three
>>> censor("email, password", "password")
email, ********
>>> censor("pin: 2536", "2536")
pin: ****

"""

txt_lst = txt.split()
#here we loop through a list which consists of words from the text we should censor
for index, word1 in enumerate(txt_lst):
if word1 == word:
txt_lst[index] = "*" * len(word1)
txt = ""
#here we combine all of the split words in txt_lst into one string
for word1 in txt_lst:
txt += word1 + " "
txt = txt[:-1]
print(txt)

if __name__ == "__main__":
import doctest
doctest.testmod()
38 changes: 38 additions & 0 deletions strings/decrypt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
def decrypt(txt: str, symbol: str) -> str:
"""
>>> decrypt("o$ne", "$")
one
>>> decrypt("dec@rypt", "@")
decrypt
>>> decrypt("p#ython cod#e", "#")
python code

"""
#here we split the string we need to decypher into a list
txt_lst = txt.split()
res_str = ""
#we create a for loop which loops through the newly created list
for word1 in txt_lst:
#here we convert the current word we got through the loop into a list of charachters
word1_lst = list(word1)
#we loop through each charachter in the newly created list of charachters form the word we are looping throuh
for char1 in word1_lst:
#we set a condition, where if the symbol the loop is currently on corresponds to the symbol we need to remove, we stop on it and examine it
if char1 == symbol:
#we find the charachters index from the word
indx = word1.index(char1)
#we remove the list (the list which contains every element and characahter from the word we are looping throuh) element with the same index from the list.
word1_lst[indx] = ""
res_wrd = ""
#we loop throuh the list containing all the charachters from the word, and append those charachters to a new string
for char1 in word1_lst:
res_wrd += char1
#here we add the newly created, decyphered word to a new string which will contain our full result
res_str += res_wrd + " "
res_str = res_str[:-1]
#and here we print out the final result
print(res_str)

if __name__ == "__main__":
import doctest
doctest.testmod()