mirror of
https://github.com/theoludwig/programming-challenges.git
synced 2024-12-08 00:45:29 +01:00
feat(solutions): add caesar-cipher/python/function
This commit is contained in:
parent
01804ace41
commit
39ecfdff7f
@ -0,0 +1,3 @@
|
|||||||
|
# caesar-cipher/python/function
|
||||||
|
|
||||||
|
Created by [@Divlo](https://github.com/Divlo) on 25 June 2021.
|
@ -0,0 +1,51 @@
|
|||||||
|
from typing import List, TypedDict
|
||||||
|
import sys
|
||||||
|
|
||||||
|
input_values: List[str] = []
|
||||||
|
for value in sys.stdin:
|
||||||
|
input_values.append(value.rstrip('\n'))
|
||||||
|
|
||||||
|
|
||||||
|
class ShiftedLetter(TypedDict):
|
||||||
|
origin: str
|
||||||
|
shifted: str
|
||||||
|
|
||||||
|
|
||||||
|
def shift_alphabet(shift: int) -> List[ShiftedLetter]:
|
||||||
|
result: List[ShiftedLetter] = []
|
||||||
|
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'.split(' ')
|
||||||
|
is_negative_shift = shift < 0
|
||||||
|
if is_negative_shift:
|
||||||
|
alphabet.reverse()
|
||||||
|
shift = abs(shift)
|
||||||
|
for index in range(len(alphabet)):
|
||||||
|
letter = alphabet[index]
|
||||||
|
shifted_index = index + shift
|
||||||
|
if shifted_index > len(alphabet) - 1:
|
||||||
|
shifted_index = abs(len(alphabet) - shifted_index)
|
||||||
|
result.append({
|
||||||
|
'origin': letter,
|
||||||
|
'shifted': alphabet[shifted_index]
|
||||||
|
})
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def caesar_cipher(string: str, shift: int) -> str:
|
||||||
|
if shift == 0:
|
||||||
|
return string
|
||||||
|
shifted_alphabet = shift_alphabet(shift)
|
||||||
|
result = ''
|
||||||
|
for letter in string:
|
||||||
|
if letter == ' ':
|
||||||
|
result += ' '
|
||||||
|
else:
|
||||||
|
found_letter: ShiftedLetter = shifted_alphabet[0]
|
||||||
|
for index in range(len(shifted_alphabet)):
|
||||||
|
shifted_letter = shifted_alphabet[index]
|
||||||
|
if shifted_letter['origin'] == letter:
|
||||||
|
found_letter = shifted_letter
|
||||||
|
result += found_letter['shifted']
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
print(caesar_cipher(input_values[0], int(input_values[1])))
|
Loading…
Reference in New Issue
Block a user