mirea-projects/Second term/Algorithms/5/2.py
2024-09-24 02:22:33 +03:00

49 lines
4.6 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from operator import itemgetter
def caesar_cipher(alphabet: str, key: int, message: str) -> str:
new_message = ""
for char in message:
is_upper = char.isupper()
char = char.lower()
if char not in alphabet:
new_message += char
continue
index_of_new_char = (alphabet.find(char) + key) % len(alphabet)
new_char = alphabet[index_of_new_char]
new_message += new_char.upper() if is_upper else new_char
return new_message
def hack(alphabet: str, delta: dict[str, float], message: str) -> int:
delta_arr = []
for key in delta.keys():
for char in alphabet:
shift = abs(alphabet.find(key) - alphabet.find(char))
delta_arr.append((abs(delta[key] - message.count(char) / len(message)), shift))
return min(delta_arr, key=itemgetter(0))[1]
def main() -> None:
encrypted_message = "Елжзо фср, дцжхс Лсфлч Гознфзлъ е псзп жспз флжлх, л в угж съзря л йзогб зёс цёсфхлхя. Дцжхс в ф тсфхсусррлпл рзцпсоърс дсохгб л ежуцё ефтспрло, ъхс ахс зпц рз псйзх ругелхяфв, л йзогб н рзпц тулдолклхяфв л зёс сдрвхя. Рс хсоянс ъхс тулдолклофв, елйц, ъхс олщс зёс тузсдугклосфя, фхгос псосжсз, л ср прз хлшс, хлшс ъхс-хс ёсесулх лк цъзряв сужзрг, хгн хлшс, ъхс в рз псёц угффоюыгхя. Тсхсп дцжхс еюыол пю ефз лк нспргхю, л ъхс-хс хцх фоцълосфя пцжузрсз. Пю флжзол лол озйгол рг тсоц. Ср прз ъхс-хс ёсесуло. Г прз дцжхс кгшсхзосфя тснгкгхя зпц фесб ъцефхелхзоярсфхя, л в, рз ефоцылегвфя е зёс узъл, фхго фздз ессдугйгхя фсфхсврлз фесзёс ерцхузррзёс ъзосезнг л сфзрлеыцб пзрв плосфхя Дсйлб. Л тсвелолфя ц пзрв фозкю рг ёогкгш, л в дюо жсесозр, ъхс ср ахс тулпзхло. Рс ср екёоврцо рг пзрв ф жсфгжсм л ефнсъло, тузфзныл фесм угкёсесу. В сусдзо л фтусфло, рз нс прз ол фнгкгррсз схрсфлосфя; рс ср рлъзёс рз схезъго, тснгкго прз огфнсеюм елж, л тсфоз ежуцё съцхлолфя пю е фтгоярз псзм, ёжз фхслх жесмргв нусегхя. Ср озё рг рзз рг нугм, л в, дцжхс тюогв н рзпц йзогрлзп огфнгхяфв, тулозё хцх йз. Л ср дцжхс ц пзрв фтугылегзх: „Фнгйлхз тс тугежз, нгнсз ею лпззхз ёогерсз тулфхугфхлз? Цкргол ол ею зёс? В жцпгб, ъхс ею цйз зёс цкргол“. В, фпцхлеылфя флп естусфсп, схезъго, ъхс озря псз ёогерсз тулфхугфхлз. Ср рзжсезуълес тснгъго ёсосесм. Л в, зьз дсозз фпцхлеылфя, схезъго, ъхс в шсхв л йлец ф йзрсб, тс зёс фсезхц, рс рз нгн пцй йзрю фесзм. Рг ахс ср ескугкло, ъхс рз жсойрс йзрц олыгхя фесзм огфнл, жго ъцефхесегхя, ъхс е ахсп дюог псв сдвкгррсфхя. Рс в схезъго, ъхс в фхюйцфя ахсёс; л ежуцё ефз фснуюосфя. Л в тусфрцофв л ргызо е пюфовш феслш хзнфх фе. Тлфгрлв: Йлесх дз фезх ъзосезнсп, г фезх ес хяпз фезхлх л хяпг зёс рз сдэвх. Олщс ц Лсфлчг Гознфззелъг дюос псосйгесз л фезхосз. Е ахсх жзря тсоцъло тлфяпс сх догёсжзхзов, е нсхсусп ср тлызх сд сдвкгррсфхл фцтуцйзфхег»."
alphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
delta = {
"о": 0.10983,
"е": 0.08483,
"а": 0.07998,
}
key = hack(alphabet, delta, encrypted_message)
print("Key:", key)
decrypted_message = caesar_cipher(alphabet, -key, encrypted_message)
print("Decrypted message:", decrypted_message)
if __name__ == "__main__":
main()