From fd9fd1c4257c9274e181d30cfc66cf353cfd20b8 Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Wed, 7 May 2025 12:22:49 -0300 Subject: [PATCH 1/9] Start draft PR From 2a1ba0706d4f6e68b2e05ae86b7350cd7fd2b1c9 Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Wed, 7 May 2025 12:23:03 -0300 Subject: [PATCH 2/9] Add string reversal function with type checking --- src/string_reversal.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/string_reversal.py diff --git a/src/string_reversal.py b/src/string_reversal.py new file mode 100644 index 00000000..567d54d9 --- /dev/null +++ b/src/string_reversal.py @@ -0,0 +1,19 @@ +def reverse_string(input_string): + """ + Reverse the given string. + + Args: + input_string (str): The string to be reversed. + + Returns: + str: The reversed string. + + Raises: + TypeError: If the input is not a string. + """ + # Check if input is a string + if not isinstance(input_string, str): + raise TypeError("Input must be a string") + + # Return the reversed string + return input_string[::-1] \ No newline at end of file From 2bc3f8688107a845debfe87761a85af3f96c7983 Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Wed, 7 May 2025 12:23:16 -0300 Subject: [PATCH 3/9] Add comprehensive tests for string reversal function --- tests/test_string_reversal.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 tests/test_string_reversal.py diff --git a/tests/test_string_reversal.py b/tests/test_string_reversal.py new file mode 100644 index 00000000..da8abb11 --- /dev/null +++ b/tests/test_string_reversal.py @@ -0,0 +1,30 @@ +import pytest +from src.string_reversal import reverse_string + +def test_reverse_string_basic(): + """Test basic string reversal.""" + assert reverse_string("hello") == "olleh" + assert reverse_string("python") == "nohtyp" + +def test_reverse_string_empty(): + """Test reversal of an empty string.""" + assert reverse_string("") == "" + +def test_reverse_string_special_chars(): + """Test reversal of string with special characters.""" + assert reverse_string("a!b@c#") == "#c@b!a" + +def test_reverse_string_unicode(): + """Test reversal of unicode string.""" + assert reverse_string("café") == "éfac" + +def test_reverse_string_invalid_input(): + """Test that TypeError is raised for non-string inputs.""" + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(123) + + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(None) + + with pytest.raises(TypeError, match="Input must be a string"): + reverse_string(["list"]) \ No newline at end of file From 3d561f3d38dd26ebf49042da8aa8a674c84c10c8 Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Wed, 7 May 2025 12:23:21 -0300 Subject: [PATCH 4/9] Add pytest to requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..55b033e9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pytest \ No newline at end of file From 636968edb0cd2b4ee447520b94d7b9a643b8da62 Mon Sep 17 00:00:00 2001 From: labrocadabro Date: Wed, 7 May 2025 12:24:10 -0300 Subject: [PATCH 5/9] Implement string reversal without using slicing or built-in reverse --- src/string_reversal.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/string_reversal.py b/src/string_reversal.py index 567d54d9..2e378e67 100644 --- a/src/string_reversal.py +++ b/src/string_reversal.py @@ -1,6 +1,6 @@ def reverse_string(input_string): """ - Reverse the given string. + Reverse the given string using a manual character-by-character approach. Args: input_string (str): The string to be reversed. @@ -15,5 +15,20 @@ def reverse_string(input_string): if not isinstance(input_string, str): raise TypeError("Input must be a string") - # Return the reversed string - return input_string[::-1] \ No newline at end of file + # Convert string to list of characters + chars = list(input_string) + + # Reverse the list of characters manually + left = 0 + right = len(chars) - 1 + + while left < right: + # Swap characters + chars[left], chars[right] = chars[right], chars[left] + + # Move towards the center + left += 1 + right -= 1 + + # Convert back to string and return + return ''.join(chars) \ No newline at end of file From c3b670fdecca2c1057decb3e383c54802c828e37 Mon Sep 17 00:00:00 2001 From: laura-abro Date: Wed, 7 May 2025 12:25:14 -0300 Subject: [PATCH 6/9] Start draft PR From 159fc2bbeaefbdccd8a443406ede0825a50fa426 Mon Sep 17 00:00:00 2001 From: laura-abro Date: Wed, 7 May 2025 12:25:31 -0300 Subject: [PATCH 7/9] Implement recursive array flattening function --- src/array_utils.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/array_utils.py diff --git a/src/array_utils.py b/src/array_utils.py new file mode 100644 index 00000000..ee93261b --- /dev/null +++ b/src/array_utils.py @@ -0,0 +1,29 @@ +from typing import List, Union, Any + +def flatten(arr: Union[List[Any], Any]) -> List[Any]: + """ + Recursively flatten a nested list into a single-level list. + + Args: + arr (Union[List[Any], Any]): Input list that may contain nested lists. + + Returns: + List[Any]: A flattened list with all nested elements extracted. + + Raises: + TypeError: If input is not a list and cannot be flattened. + """ + # Base case: if input is not a list, return it as a single-element list + if not isinstance(arr, list): + return [arr] + + # Recursive flattening + flattened = [] + for item in arr: + # Recursively flatten each item + if isinstance(item, list): + flattened.extend(flatten(item)) + else: + flattened.append(item) + + return flattened \ No newline at end of file From 4db734e490e91e68cf84bfd41be11e8452214919 Mon Sep 17 00:00:00 2001 From: laura-abro Date: Wed, 7 May 2025 12:25:43 -0300 Subject: [PATCH 8/9] Add comprehensive tests for array flattening function --- tests/test_array_utils.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tests/test_array_utils.py diff --git a/tests/test_array_utils.py b/tests/test_array_utils.py new file mode 100644 index 00000000..49602f39 --- /dev/null +++ b/tests/test_array_utils.py @@ -0,0 +1,34 @@ +import pytest +from src.array_utils import flatten + +def test_flatten_simple_list(): + """Test flattening a simple list""" + assert flatten([1, 2, 3]) == [1, 2, 3] + +def test_flatten_nested_list(): + """Test flattening a list with one level of nesting""" + assert flatten([1, [2, 3], 4]) == [1, 2, 3, 4] + +def test_flatten_deeply_nested_list(): + """Test flattening a list with multiple levels of nesting""" + assert flatten([1, [2, [3, 4]], 5]) == [1, 2, 3, 4, 5] + +def test_flatten_complex_nested_list(): + """Test flattening a more complex nested list""" + assert flatten([1, [2, [3, [4, 5]]], 6]) == [1, 2, 3, 4, 5, 6] + +def test_flatten_empty_list(): + """Test flattening an empty list""" + assert flatten([]) == [] + +def test_flatten_non_list_single_element(): + """Test flattening a single non-list element""" + assert flatten(42) == [42] + +def test_flatten_mixed_types(): + """Test flattening a list with mixed types of nested elements""" + assert flatten([1, [2, 'three'], [4, [5, None]]]) == [1, 2, 'three', 4, 5, None] + +def test_nested_empty_lists(): + """Test flattening lists containing empty lists""" + assert flatten([1, [], [2, []], 3]) == [1, 2, 3] \ No newline at end of file From 3f6969624baf82cb0fc46ea8dbab1190dfe9516f Mon Sep 17 00:00:00 2001 From: momstrosity Date: Wed, 7 May 2025 12:27:59 -0300 Subject: [PATCH 9/9] Start draft PR