mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Add tests to morse_code.py (#5337)
* Add tests to morse_code.py @dhruvmanila @poyea Your reviews, please. * updating DIRECTORY.md Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
This commit is contained in:
parent
433b804f7d
commit
8dc7cdbc57
|
@ -53,6 +53,7 @@
|
||||||
* [A1Z26](https://github.com/TheAlgorithms/Python/blob/master/ciphers/a1z26.py)
|
* [A1Z26](https://github.com/TheAlgorithms/Python/blob/master/ciphers/a1z26.py)
|
||||||
* [Affine Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/affine_cipher.py)
|
* [Affine Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/affine_cipher.py)
|
||||||
* [Atbash](https://github.com/TheAlgorithms/Python/blob/master/ciphers/atbash.py)
|
* [Atbash](https://github.com/TheAlgorithms/Python/blob/master/ciphers/atbash.py)
|
||||||
|
* [Baconian Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/baconian_cipher.py)
|
||||||
* [Base16](https://github.com/TheAlgorithms/Python/blob/master/ciphers/base16.py)
|
* [Base16](https://github.com/TheAlgorithms/Python/blob/master/ciphers/base16.py)
|
||||||
* [Base32](https://github.com/TheAlgorithms/Python/blob/master/ciphers/base32.py)
|
* [Base32](https://github.com/TheAlgorithms/Python/blob/master/ciphers/base32.py)
|
||||||
* [Base64 Encoding](https://github.com/TheAlgorithms/Python/blob/master/ciphers/base64_encoding.py)
|
* [Base64 Encoding](https://github.com/TheAlgorithms/Python/blob/master/ciphers/base64_encoding.py)
|
||||||
|
@ -70,7 +71,7 @@
|
||||||
* [Hill Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/hill_cipher.py)
|
* [Hill Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/hill_cipher.py)
|
||||||
* [Mixed Keyword Cypher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/mixed_keyword_cypher.py)
|
* [Mixed Keyword Cypher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/mixed_keyword_cypher.py)
|
||||||
* [Mono Alphabetic Ciphers](https://github.com/TheAlgorithms/Python/blob/master/ciphers/mono_alphabetic_ciphers.py)
|
* [Mono Alphabetic Ciphers](https://github.com/TheAlgorithms/Python/blob/master/ciphers/mono_alphabetic_ciphers.py)
|
||||||
* [Morse Code Implementation](https://github.com/TheAlgorithms/Python/blob/master/ciphers/morse_code_implementation.py)
|
* [Morse Code](https://github.com/TheAlgorithms/Python/blob/master/ciphers/morse_code.py)
|
||||||
* [Onepad Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/onepad_cipher.py)
|
* [Onepad Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/onepad_cipher.py)
|
||||||
* [Playfair Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/playfair_cipher.py)
|
* [Playfair Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/playfair_cipher.py)
|
||||||
* [Porta Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/porta_cipher.py)
|
* [Porta Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/porta_cipher.py)
|
||||||
|
@ -328,10 +329,12 @@
|
||||||
* [Graph Matrix](https://github.com/TheAlgorithms/Python/blob/master/graphs/graph_matrix.py)
|
* [Graph Matrix](https://github.com/TheAlgorithms/Python/blob/master/graphs/graph_matrix.py)
|
||||||
* [Graphs Floyd Warshall](https://github.com/TheAlgorithms/Python/blob/master/graphs/graphs_floyd_warshall.py)
|
* [Graphs Floyd Warshall](https://github.com/TheAlgorithms/Python/blob/master/graphs/graphs_floyd_warshall.py)
|
||||||
* [Greedy Best First](https://github.com/TheAlgorithms/Python/blob/master/graphs/greedy_best_first.py)
|
* [Greedy Best First](https://github.com/TheAlgorithms/Python/blob/master/graphs/greedy_best_first.py)
|
||||||
|
* [Greedy Min Vertex Cover](https://github.com/TheAlgorithms/Python/blob/master/graphs/greedy_min_vertex_cover.py)
|
||||||
* [Kahns Algorithm Long](https://github.com/TheAlgorithms/Python/blob/master/graphs/kahns_algorithm_long.py)
|
* [Kahns Algorithm Long](https://github.com/TheAlgorithms/Python/blob/master/graphs/kahns_algorithm_long.py)
|
||||||
* [Kahns Algorithm Topo](https://github.com/TheAlgorithms/Python/blob/master/graphs/kahns_algorithm_topo.py)
|
* [Kahns Algorithm Topo](https://github.com/TheAlgorithms/Python/blob/master/graphs/kahns_algorithm_topo.py)
|
||||||
* [Karger](https://github.com/TheAlgorithms/Python/blob/master/graphs/karger.py)
|
* [Karger](https://github.com/TheAlgorithms/Python/blob/master/graphs/karger.py)
|
||||||
* [Markov Chain](https://github.com/TheAlgorithms/Python/blob/master/graphs/markov_chain.py)
|
* [Markov Chain](https://github.com/TheAlgorithms/Python/blob/master/graphs/markov_chain.py)
|
||||||
|
* [Matching Min Vertex Cover](https://github.com/TheAlgorithms/Python/blob/master/graphs/matching_min_vertex_cover.py)
|
||||||
* [Minimum Spanning Tree Boruvka](https://github.com/TheAlgorithms/Python/blob/master/graphs/minimum_spanning_tree_boruvka.py)
|
* [Minimum Spanning Tree Boruvka](https://github.com/TheAlgorithms/Python/blob/master/graphs/minimum_spanning_tree_boruvka.py)
|
||||||
* [Minimum Spanning Tree Kruskal](https://github.com/TheAlgorithms/Python/blob/master/graphs/minimum_spanning_tree_kruskal.py)
|
* [Minimum Spanning Tree Kruskal](https://github.com/TheAlgorithms/Python/blob/master/graphs/minimum_spanning_tree_kruskal.py)
|
||||||
* [Minimum Spanning Tree Kruskal2](https://github.com/TheAlgorithms/Python/blob/master/graphs/minimum_spanning_tree_kruskal2.py)
|
* [Minimum Spanning Tree Kruskal2](https://github.com/TheAlgorithms/Python/blob/master/graphs/minimum_spanning_tree_kruskal2.py)
|
||||||
|
@ -497,6 +500,7 @@
|
||||||
* [Prime Numbers](https://github.com/TheAlgorithms/Python/blob/master/maths/prime_numbers.py)
|
* [Prime Numbers](https://github.com/TheAlgorithms/Python/blob/master/maths/prime_numbers.py)
|
||||||
* [Prime Sieve Eratosthenes](https://github.com/TheAlgorithms/Python/blob/master/maths/prime_sieve_eratosthenes.py)
|
* [Prime Sieve Eratosthenes](https://github.com/TheAlgorithms/Python/blob/master/maths/prime_sieve_eratosthenes.py)
|
||||||
* [Primelib](https://github.com/TheAlgorithms/Python/blob/master/maths/primelib.py)
|
* [Primelib](https://github.com/TheAlgorithms/Python/blob/master/maths/primelib.py)
|
||||||
|
* [Proth Number](https://github.com/TheAlgorithms/Python/blob/master/maths/proth_number.py)
|
||||||
* [Pythagoras](https://github.com/TheAlgorithms/Python/blob/master/maths/pythagoras.py)
|
* [Pythagoras](https://github.com/TheAlgorithms/Python/blob/master/maths/pythagoras.py)
|
||||||
* [Qr Decomposition](https://github.com/TheAlgorithms/Python/blob/master/maths/qr_decomposition.py)
|
* [Qr Decomposition](https://github.com/TheAlgorithms/Python/blob/master/maths/qr_decomposition.py)
|
||||||
* [Quadratic Equations Complex Numbers](https://github.com/TheAlgorithms/Python/blob/master/maths/quadratic_equations_complex_numbers.py)
|
* [Quadratic Equations Complex Numbers](https://github.com/TheAlgorithms/Python/blob/master/maths/quadratic_equations_complex_numbers.py)
|
||||||
|
@ -951,6 +955,7 @@
|
||||||
* [Current Stock Price](https://github.com/TheAlgorithms/Python/blob/master/web_programming/current_stock_price.py)
|
* [Current Stock Price](https://github.com/TheAlgorithms/Python/blob/master/web_programming/current_stock_price.py)
|
||||||
* [Current Weather](https://github.com/TheAlgorithms/Python/blob/master/web_programming/current_weather.py)
|
* [Current Weather](https://github.com/TheAlgorithms/Python/blob/master/web_programming/current_weather.py)
|
||||||
* [Daily Horoscope](https://github.com/TheAlgorithms/Python/blob/master/web_programming/daily_horoscope.py)
|
* [Daily Horoscope](https://github.com/TheAlgorithms/Python/blob/master/web_programming/daily_horoscope.py)
|
||||||
|
* [Download Images From Google Query](https://github.com/TheAlgorithms/Python/blob/master/web_programming/download_images_from_google_query.py)
|
||||||
* [Emails From Url](https://github.com/TheAlgorithms/Python/blob/master/web_programming/emails_from_url.py)
|
* [Emails From Url](https://github.com/TheAlgorithms/Python/blob/master/web_programming/emails_from_url.py)
|
||||||
* [Fetch Bbc News](https://github.com/TheAlgorithms/Python/blob/master/web_programming/fetch_bbc_news.py)
|
* [Fetch Bbc News](https://github.com/TheAlgorithms/Python/blob/master/web_programming/fetch_bbc_news.py)
|
||||||
* [Fetch Github Info](https://github.com/TheAlgorithms/Python/blob/master/web_programming/fetch_github_info.py)
|
* [Fetch Github Info](https://github.com/TheAlgorithms/Python/blob/master/web_programming/fetch_github_info.py)
|
||||||
|
|
58
ciphers/morse_code.py
Normal file
58
ciphers/morse_code.py
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
"""
|
||||||
|
Python program to translate to and from Morse code.
|
||||||
|
|
||||||
|
https://en.wikipedia.org/wiki/Morse_code
|
||||||
|
"""
|
||||||
|
|
||||||
|
# fmt: off
|
||||||
|
MORSE_CODE_DICT = {
|
||||||
|
"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": "--..", "1": ".----",
|
||||||
|
"2": "..---", "3": "...--", "4": "....-", "5": ".....", "6": "-....", "7": "--...",
|
||||||
|
"8": "---..", "9": "----.", "0": "-----", "&": ".-...", "@": ".--.-.",
|
||||||
|
":": "---...", ",": "--..--", ".": ".-.-.-", "'": ".----.", '"': ".-..-.",
|
||||||
|
"?": "..--..", "/": "-..-.", "=": "-...-", "+": ".-.-.", "-": "-....-",
|
||||||
|
"(": "-.--.", ")": "-.--.-", "!": "-.-.--", " ": "/"
|
||||||
|
} # Exclamation mark is not in ITU-R recommendation
|
||||||
|
# fmt: on
|
||||||
|
REVERSE_DICT = {value: key for key, value in MORSE_CODE_DICT.items()}
|
||||||
|
|
||||||
|
|
||||||
|
def encrypt(message: str) -> str:
|
||||||
|
"""
|
||||||
|
>>> encrypt("Sos!")
|
||||||
|
'... --- ... -.-.--'
|
||||||
|
>>> encrypt("SOS!") == encrypt("sos!")
|
||||||
|
True
|
||||||
|
"""
|
||||||
|
return " ".join(MORSE_CODE_DICT[char] for char in message.upper())
|
||||||
|
|
||||||
|
|
||||||
|
def decrypt(message: str) -> str:
|
||||||
|
"""
|
||||||
|
>>> decrypt('... --- ... -.-.--')
|
||||||
|
'SOS!'
|
||||||
|
"""
|
||||||
|
return "".join(REVERSE_DICT[char] for char in message.split())
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
"""
|
||||||
|
>>> s = "".join(MORSE_CODE_DICT)
|
||||||
|
>>> decrypt(encrypt(s)) == s
|
||||||
|
True
|
||||||
|
"""
|
||||||
|
message = "Morse code here!"
|
||||||
|
print(message)
|
||||||
|
message = encrypt(message)
|
||||||
|
print(message)
|
||||||
|
message = decrypt(message)
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -1,97 +0,0 @@
|
||||||
# Python program to implement Morse Code Translator
|
|
||||||
|
|
||||||
# Dictionary representing the morse code chart
|
|
||||||
MORSE_CODE_DICT = {
|
|
||||||
"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": "--..",
|
|
||||||
"1": ".----",
|
|
||||||
"2": "..---",
|
|
||||||
"3": "...--",
|
|
||||||
"4": "....-",
|
|
||||||
"5": ".....",
|
|
||||||
"6": "-....",
|
|
||||||
"7": "--...",
|
|
||||||
"8": "---..",
|
|
||||||
"9": "----.",
|
|
||||||
"0": "-----",
|
|
||||||
"&": ".-...",
|
|
||||||
"@": ".--.-.",
|
|
||||||
":": "---...",
|
|
||||||
",": "--..--",
|
|
||||||
".": ".-.-.-",
|
|
||||||
"'": ".----.",
|
|
||||||
'"': ".-..-.",
|
|
||||||
"?": "..--..",
|
|
||||||
"/": "-..-.",
|
|
||||||
"=": "-...-",
|
|
||||||
"+": ".-.-.",
|
|
||||||
"-": "-....-",
|
|
||||||
"(": "-.--.",
|
|
||||||
")": "-.--.-",
|
|
||||||
# Exclamation mark is not in ITU-R recommendation
|
|
||||||
"!": "-.-.--",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def encrypt(message: str) -> str:
|
|
||||||
cipher = ""
|
|
||||||
for letter in message:
|
|
||||||
if letter != " ":
|
|
||||||
cipher += MORSE_CODE_DICT[letter] + " "
|
|
||||||
else:
|
|
||||||
cipher += "/ "
|
|
||||||
|
|
||||||
# Remove trailing space added on line 64
|
|
||||||
return cipher[:-1]
|
|
||||||
|
|
||||||
|
|
||||||
def decrypt(message: str) -> str:
|
|
||||||
decipher = ""
|
|
||||||
letters = message.split(" ")
|
|
||||||
for letter in letters:
|
|
||||||
if letter != "/":
|
|
||||||
decipher += list(MORSE_CODE_DICT.keys())[
|
|
||||||
list(MORSE_CODE_DICT.values()).index(letter)
|
|
||||||
]
|
|
||||||
else:
|
|
||||||
decipher += " "
|
|
||||||
|
|
||||||
return decipher
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
|
||||||
message = "Morse code here"
|
|
||||||
result = encrypt(message.upper())
|
|
||||||
print(result)
|
|
||||||
|
|
||||||
message = result
|
|
||||||
result = decrypt(message)
|
|
||||||
print(result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
Loading…
Reference in New Issue
Block a user