From 40c55cd0e55930e1d88fe4ed431986030722d13e Mon Sep 17 00:00:00 2001 From: zimmersandro Date: Tue, 23 Jun 2026 21:24:36 +0200 Subject: [PATCH] chore: added kata description. feat: kata rot13, which is a cesar cipher with 13 letter shift. test: test cases for kata rot13. --- README.md | 3 ++- src/codewars/kata_rot13.py | 22 ++++++++++++++++++++++ tests/tests_codewars/test_rot13.py | 14 ++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/codewars/kata_rot13.py create mode 100644 tests/tests_codewars/test_rot13.py diff --git a/README.md b/README.md index dd10e4f..8225755 100644 --- a/README.md +++ b/README.md @@ -33,4 +33,5 @@ Repository for CDS-2020 Programming and Promt Engineering II |Chinese Numeral Encoder|kata_chinese_numeral_encoder.py|test_chinese_numeral_encoder.py|[52608f5345d4a19bed000b31](https://www.codewars.com/kata/52608f5345d4a19bed000b31)| |RGB To Hex Conversion|kata_rgb_2_hex.py|test_rgb_2_hex.py|[513e08acc600c94f01000001](https://www.codewars.com/kata/513e08acc600c94f01000001)| |Most frequently used words in a text|kata_most_words_used.py|test_most_words_used.py|[51e056fe544cf36c410000fb](https://www.codewars.com/kata/51e056fe544cf36c410000fb)| -|Simple Fun #128: Doubly Not Less|kata_doubly_not_less.py|test_doubly_not_less.py|[58a3ea0a8bdda5093800000e](https://www.codewars.com/kata/58a3ea0a8bdda5093800000e)| \ No newline at end of file +|Simple Fun #128: Doubly Not Less|kata_doubly_not_less.py|test_doubly_not_less.py|[58a3ea0a8bdda5093800000e](https://www.codewars.com/kata/58a3ea0a8bdda5093800000e)| +|Rot13|kata_rot13.py|test_rot13.py|[530e15517bc88ac656000716](https://www.codewars.com/kata/530e15517bc88ac656000716/)| diff --git a/src/codewars/kata_rot13.py b/src/codewars/kata_rot13.py new file mode 100644 index 0000000..852c339 --- /dev/null +++ b/src/codewars/kata_rot13.py @@ -0,0 +1,22 @@ +ALPHABET = "abcdefghijklmnopqrstuvwxyz" + + +def rot13(s): + cipher = [] + + for c in s: + make_upper = c.isupper() + c = c.lower() + + if c.isalpha(): + i = (ALPHABET.index(c) + 13) % 26 + new_s = ALPHABET[i] + + if make_upper: + new_s = new_s.upper() + + cipher.append(new_s) + else: + cipher.append(c) + + return "".join(cipher) diff --git a/tests/tests_codewars/test_rot13.py b/tests/tests_codewars/test_rot13.py new file mode 100644 index 0000000..b28ca0e --- /dev/null +++ b/tests/tests_codewars/test_rot13.py @@ -0,0 +1,14 @@ +from src.codewars.kata_rot13 import rot13 +import pytest + + +@pytest.mark.parametrize( + ("s", "expected"), + [ + ("test", "grfg"), + ("Test", "Grfg"), + ("aA bB zZ 1234 *!?%", "nN oO mM 1234 *!?%"), + ], +) +def test_rot13(s, expected): + assert rot13(s) == expected