1
1
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:
Divlo 2021-06-25 13:45:52 +02:00
parent 01804ace41
commit 39ecfdff7f
No known key found for this signature in database
GPG Key ID: 185ED2F15F104E52
2 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,3 @@
# caesar-cipher/python/function
Created by [@Divlo](https://github.com/Divlo) on 25 June 2021.

View File

@ -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])))