From d62ebf7274ae69e689bcec73ac0400e7f827f4ba Mon Sep 17 00:00:00 2001 From: Vivek Date: Sat, 20 Jun 2026 11:33:40 +0530 Subject: [PATCH 1/7] corrected the typos --- strings/camel_case_to_snake_case.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/strings/camel_case_to_snake_case.py b/strings/camel_case_to_snake_case.py index 582907be2edb..a01b8e4c06bb 100644 --- a/strings/camel_case_to_snake_case.py +++ b/strings/camel_case_to_snake_case.py @@ -5,8 +5,8 @@ def camel_to_snake_case(input_str: str) -> str: >>> camel_to_snake_case("someRandomString") 'some_random_string' - >>> camel_to_snake_case("SomeRandomStr#ng") - 'some_random_str_ng' + >>> camel_to_snake_case("SomeRandomString") + 'some_random_string' >>> camel_to_snake_case("123someRandom123String123") '123_some_random_123_string_123' From 7fde9ffd906c2c4fe32c1d8ba90830bc2bc7d4e7 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 21 Jun 2026 21:26:49 +0530 Subject: [PATCH 2/7] added new file secret_language --- strings/Secret_language.py | 92 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 strings/Secret_language.py diff --git a/strings/Secret_language.py b/strings/Secret_language.py new file mode 100644 index 000000000000..0984c6bbe37b --- /dev/null +++ b/strings/Secret_language.py @@ -0,0 +1,92 @@ +# Encoding & Decoding + +import random +import string + + +def random_chars() -> str: + ''' + Generate a random string of 3 ASCII letters. + + >>> import random + >>> len(random_chars()) == 3 + True + + + >>> all(c in string.ascii_letters for c in random_chars()) + True + + + + ''' + return ''.join(random.choices(string.ascii_letters, k=3)) + + +def random_digits() -> str: + """ + create a random string of 3 digits. + + >>> len(random_digits()) == 3 + True + + + + >>> all(c in string.digits for c in random_digits()) + True + """ + return ''.join(random.choices(string.digits, k=3)) + + +def encode(code: str) -> str: + """ + Encode a string by shifting the first character to the end and + wrapping it with random padding of 3 letters and 3 digits on each side. + + Reference: https://en.wikipedia.org/wiki/Caesar_cipher + + >>> len(encode('hello')) == len('hello') + 12 + True + >>> len(encode('hi')) == len('hi') + 12 + True + + + """ + if len(code) >= 3: + code = code[1:] + code[0] + code = random_chars() + random_digits() + code + random_digits() + random_chars() + else: + code = code[::-1] + code = random_chars() + random_digits() + code + random_digits() + random_chars() + return code + + +def decode(code: str) -> str: + """ + Decode an encoded string by stripping the random padding and + reversing the character shift. + + >>> decode(encode('hello')) + 'hello' + >>> decode(encode('hi')) + 'hi' + >>> decode(encode('python')) + 'python' + + + + """ + code = code[6:-6] + if len(code) >= 3: + code = code[-1] + code[:-1] + else: + code = code[::-1] + return code + + +if __name__ == "__main__": + code = input("Enter the code: ") + encoded = encode(code) + decoded = decode(encoded) + print(f"Original → {code}") + print(f"Encoded → {encoded}") + print(f"Decoded → {decoded}") \ No newline at end of file From 14222f933694f4a02aa1964b8ad526a36e794b67 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 16:01:19 +0000 Subject: [PATCH 3/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- strings/Secret_language.py | 54 ++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/strings/Secret_language.py b/strings/Secret_language.py index 0984c6bbe37b..58c9dfee6561 100644 --- a/strings/Secret_language.py +++ b/strings/Secret_language.py @@ -5,36 +5,36 @@ def random_chars() -> str: - ''' + """ Generate a random string of 3 ASCII letters. >>> import random >>> len(random_chars()) == 3 True - - + + >>> all(c in string.ascii_letters for c in random_chars()) True - - - - ''' - return ''.join(random.choices(string.ascii_letters, k=3)) + + + + """ + return "".join(random.choices(string.ascii_letters, k=3)) def random_digits() -> str: """ - create a random string of 3 digits. + create a random string of 3 digits. - >>> len(random_digits()) == 3 - True - - - - >>> all(c in string.digits for c in random_digits()) - True + >>> len(random_digits()) == 3 + True + + + + >>> all(c in string.digits for c in random_digits()) + True """ - return ''.join(random.choices(string.digits, k=3)) + return "".join(random.choices(string.digits, k=3)) def encode(code: str) -> str: @@ -48,15 +48,19 @@ def encode(code: str) -> str: True >>> len(encode('hi')) == len('hi') + 12 True - - + + """ if len(code) >= 3: code = code[1:] + code[0] - code = random_chars() + random_digits() + code + random_digits() + random_chars() + code = ( + random_chars() + random_digits() + code + random_digits() + random_chars() + ) else: code = code[::-1] - code = random_chars() + random_digits() + code + random_digits() + random_chars() + code = ( + random_chars() + random_digits() + code + random_digits() + random_chars() + ) return code @@ -71,9 +75,9 @@ def decode(code: str) -> str: 'hi' >>> decode(encode('python')) 'python' - - - + + + """ code = code[6:-6] if len(code) >= 3: @@ -89,4 +93,4 @@ def decode(code: str) -> str: decoded = decode(encoded) print(f"Original → {code}") print(f"Encoded → {encoded}") - print(f"Decoded → {decoded}") \ No newline at end of file + print(f"Decoded → {decoded}") From 179cc83f3e98d2f2fd24f2dd0c2ab37c78445431 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 21 Jun 2026 21:46:39 +0530 Subject: [PATCH 4/7] Fix ruff linting issue in decode function --- strings/Secret_language.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/strings/Secret_language.py b/strings/Secret_language.py index 58c9dfee6561..98d5f098e062 100644 --- a/strings/Secret_language.py +++ b/strings/Secret_language.py @@ -80,10 +80,7 @@ def decode(code: str) -> str: """ code = code[6:-6] - if len(code) >= 3: - code = code[-1] + code[:-1] - else: - code = code[::-1] + code = code[-1] + code[:-1] if len(code) >= 3 else code[::-1] return code From 4cabf5956296d3dfdd86e12c6399bb513f6a6c26 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 21 Jun 2026 21:54:21 +0530 Subject: [PATCH 5/7] Rename Secret_language.py to secret_language.py --- strings/{Secret_language.py => secret_language.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename strings/{Secret_language.py => secret_language.py} (100%) diff --git a/strings/Secret_language.py b/strings/secret_language.py similarity index 100% rename from strings/Secret_language.py rename to strings/secret_language.py From 6ce1389bac7b8967b2c872f53c56cf6d84a4d32b Mon Sep 17 00:00:00 2001 From: Vivek Date: Sat, 27 Jun 2026 20:12:58 +0530 Subject: [PATCH 6/7] added new number guessing game --- strings/number_guessing.py | 76 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 strings/number_guessing.py diff --git a/strings/number_guessing.py b/strings/number_guessing.py new file mode 100644 index 000000000000..39de7c312aab --- /dev/null +++ b/strings/number_guessing.py @@ -0,0 +1,76 @@ +"""Number Guessing Game. + +A simple game where the user guesses a randomly generated number +within a user-defined range. + +Reference: https://en.wikipedia.org/wiki/Guessing_game +""" + +import random + + +def get_top_of_range() -> int: + """ + Get the upper bound of the guessing range from the user. + + >>> isinstance(get_top_of_range(), int) + True + """ + top_of_range = input("Enter the upper bound number: ") + if top_of_range.isdigit(): + top_of_range = int(top_of_range) + if top_of_range <= 0: + print("Please enter a number larger than 0.") + quit() + else: + print("Please enter a valid digit.") + quit() + return top_of_range + + +def get_guess() -> int: + """ + Get a valid integer guess from the user. + + >>> isinstance(get_guess(), int) + True + """ + while True: + guess = input("Please make a guess: ") + if guess.isdigit(): + return int(guess) + print("Please type a number next time.") + + +def play_game(top_of_range: int) -> int: + """ + Play the number guessing game and return the number of guesses. + + >>> import random + >>> random.seed(42) + >>> play_game(1) + Whoa! You got it. + 1 + """ + random_number = random.randint(0, top_of_range) + guesses = 0 + + while True: + guesses += 1 + guess = get_guess() + + if guess == random_number: + print("Whoa! You got it.") + break + elif guess < random_number: + print("Too low! Try higher.") + else: + print("Too high! Try lower.") + + return guesses + + +if __name__ == "__main__": + top = get_top_of_range() + total_guesses = play_game(top) + print(f"You got it in {total_guesses} guesses!") \ No newline at end of file From 28e862e875f67278438fd47672d0e6e8be9d1d89 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 27 Jun 2026 14:46:20 +0000 Subject: [PATCH 7/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- strings/number_guessing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/strings/number_guessing.py b/strings/number_guessing.py index 39de7c312aab..5c727b1cc7a6 100644 --- a/strings/number_guessing.py +++ b/strings/number_guessing.py @@ -73,4 +73,4 @@ def play_game(top_of_range: int) -> int: if __name__ == "__main__": top = get_top_of_range() total_guesses = play_game(top) - print(f"You got it in {total_guesses} guesses!") \ No newline at end of file + print(f"You got it in {total_guesses} guesses!")