mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-03-27 00:46:43 +00:00
Update atbash cipher (doc, doctest, performance) (#2017)
* Update atbash * Add benchmark() to quantify the performance improvement Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
parent
777ddca2e9
commit
965d02ad41
@ -1,6 +1,17 @@
|
|||||||
def atbash():
|
""" https://en.wikipedia.org/wiki/Atbash """
|
||||||
|
import string
|
||||||
|
|
||||||
|
|
||||||
|
def atbash_slow(sequence: str) -> str:
|
||||||
|
"""
|
||||||
|
>>> atbash_slow("ABCDEFG")
|
||||||
|
'ZYXWVUT'
|
||||||
|
|
||||||
|
>>> atbash_slow("aW;;123BX")
|
||||||
|
'zD;;123YC'
|
||||||
|
"""
|
||||||
output = ""
|
output = ""
|
||||||
for i in input("Enter the sentence to be encrypted ").strip():
|
for i in sequence:
|
||||||
extract = ord(i)
|
extract = ord(i)
|
||||||
if 65 <= extract <= 90:
|
if 65 <= extract <= 90:
|
||||||
output += chr(155 - extract)
|
output += chr(155 - extract)
|
||||||
@ -8,8 +19,48 @@ def atbash():
|
|||||||
output += chr(219 - extract)
|
output += chr(219 - extract)
|
||||||
else:
|
else:
|
||||||
output += i
|
output += i
|
||||||
print(output)
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def atbash(sequence: str) -> str:
|
||||||
|
"""
|
||||||
|
>>> atbash("ABCDEFG")
|
||||||
|
'ZYXWVUT'
|
||||||
|
|
||||||
|
>>> atbash("aW;;123BX")
|
||||||
|
'zD;;123YC'
|
||||||
|
"""
|
||||||
|
letters = string.ascii_letters
|
||||||
|
letters_reversed = string.ascii_lowercase[::-1] + string.ascii_uppercase[::-1]
|
||||||
|
return "".join(
|
||||||
|
letters_reversed[letters.index(c)] if c in letters else c for c in sequence
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def benchmark() -> None:
|
||||||
|
"""Let's benchmark them side-by-side..."""
|
||||||
|
from timeit import timeit
|
||||||
|
|
||||||
|
print("Running performance benchmarks...")
|
||||||
|
print(
|
||||||
|
"> atbash_slow()",
|
||||||
|
timeit(
|
||||||
|
"atbash_slow(printable)",
|
||||||
|
setup="from string import printable ; from __main__ import atbash_slow",
|
||||||
|
),
|
||||||
|
"seconds",
|
||||||
|
)
|
||||||
|
print(
|
||||||
|
"> atbash()",
|
||||||
|
timeit(
|
||||||
|
"atbash(printable)",
|
||||||
|
setup="from string import printable ; from __main__ import atbash",
|
||||||
|
),
|
||||||
|
"seconds",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
atbash()
|
for sequence in ("ABCDEFGH", "123GGjj", "testStringtest", "with space"):
|
||||||
|
print(f"{sequence} encrypted in atbash: {atbash(sequence)}")
|
||||||
|
benchmark()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user