diff --git a/exercises/binary_search_recursive/solution.py b/exercises/binary_search_recursive/solution.py index c437af8..919835f 100644 --- a/exercises/binary_search_recursive/solution.py +++ b/exercises/binary_search_recursive/solution.py @@ -1,11 +1,22 @@ -SUBMIT = False +SUBMIT = True def binary_search_recursive( lst: list[int], target: int, low: int = 0, high: int | None = None ) -> int: - """Recursive Binary Search""" - pass + if(high is None): + high = len(lst) - 1 + + if(low > high): + return -1 + + mid = (low + high) // 2 + if(lst[mid] == target): + return mid + elif(lst[mid] < target): + return binary_search_recursive(lst, target, low, mid - 1) + else: + return binary_search_recursive(lst, target, mid + 1, high) def test() -> None: diff --git a/exercises/case_inverter/solution.py b/exercises/case_inverter/solution.py index 4f8a5db..ea29b6e 100644 --- a/exercises/case_inverter/solution.py +++ b/exercises/case_inverter/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def case_inverter(s: str) -> str: # noqa: ARG001 @@ -21,8 +21,8 @@ def test() -> None: cases = [ ("Hello World!", "hELLO wORLD!"), ("", ""), - ("all lower", "ALL UPPER"), - ("ALL UPPER", "all lower"), + ("all lower", "ALL LOWER"), + ("ALL UPPER", "all upper"), ("1234567890 !@#$%^&*()", "1234567890 !@#$%^&*()"), ("Python 3.12", "pYTHON 3.12"), ] diff --git a/exercises/celsius_to_fahrenheit/solution.py b/exercises/celsius_to_fahrenheit/solution.py index fedf347..4870e4e 100644 --- a/exercises/celsius_to_fahrenheit/solution.py +++ b/exercises/celsius_to_fahrenheit/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def celsius_to_fahrenheit(_celsius: float) -> float: @@ -13,7 +13,7 @@ def celsius_to_fahrenheit(_celsius: float) -> float: >>> celsius_to_fahrenheit(-40) -40.0 """ - return 0.0 + return (_celsius * 9/5) + 32 def test() -> None: diff --git a/exercises/char_frequency/solution.py b/exercises/char_frequency/solution.py index 3a45f7f..3102055 100644 --- a/exercises/char_frequency/solution.py +++ b/exercises/char_frequency/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def char_frequency(s: str) -> dict[str, int]: diff --git a/exercises/count_vowels/solution.py b/exercises/count_vowels/solution.py index e03c7cf..1733318 100644 --- a/exercises/count_vowels/solution.py +++ b/exercises/count_vowels/solution.py @@ -36,6 +36,7 @@ def test_exercise_solutions_have_asserts() -> None: f"test() function in {exercise.name} missing assert statement" ) + # Add a test function with an assert for count_vowels def test(): # Example: assert count_vowels("hello") == 2 diff --git a/exercises/factorial_iterative/solution.py b/exercises/factorial_iterative/solution.py index 78bca9d..ff80ccc 100644 --- a/exercises/factorial_iterative/solution.py +++ b/exercises/factorial_iterative/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def factorial_iterative(_n: int) -> int: @@ -11,7 +11,10 @@ def factorial_iterative(_n: int) -> int: >>> factorial_iterative(5) 120 """ - return 0 + fac = 1 + for i in range(1, _n + 1): + fac *= i + return fac def test() -> None: diff --git a/exercises/factorial_tail/solution.py b/exercises/factorial_tail/solution.py index e661ccc..b138917 100644 --- a/exercises/factorial_tail/solution.py +++ b/exercises/factorial_tail/solution.py @@ -1,9 +1,10 @@ -SUBMIT = False +SUBMIT = True def factorial_tail(n: int, acc: int = 1) -> int: - """Tail Recursive Factorial""" - pass + if(n <= 0): + return acc + return factorial_tail(n - 1, n * acc) def test() -> None: diff --git a/exercises/fast_exponentiation/solution.py b/exercises/fast_exponentiation/solution.py index 596fd5a..da2ba31 100644 --- a/exercises/fast_exponentiation/solution.py +++ b/exercises/fast_exponentiation/solution.py @@ -1,9 +1,18 @@ -SUBMIT = False +SUBMIT = True def fast_exponentiation(a: int, n: int) -> int: - """Fast Exponentiation""" - pass + if(n < 0): + return 1 / fast_exponentiation(a, -n) + elif(n == 0): + return 1 + elif(n == 1): + return a + last = fast_exponentiation(a, n // 2) + last *= last + if(n % 2 == 1): + last *= a + return last def test() -> None: diff --git a/exercises/fibonacci/solution.py b/exercises/fibonacci/solution.py index b85766d..b0226c6 100644 --- a/exercises/fibonacci/solution.py +++ b/exercises/fibonacci/solution.py @@ -1,20 +1,15 @@ -SUBMIT = False +SUBMIT = True def fibonacci(n: int) -> int: - """Calculates the n-th Fibonacci number. - - Example usage: - >>> fibonacci(0) - 0 - >>> fibonacci(1) - 1 - >>> fibonacci(5) - 5 - >>> fibonacci(10) - 55 - """ - return 0 + arr = [0, 1] + if(n < 0): + return 0 + elif(n < 2): + return arr[n] + for i in range(n - 1): + arr[i % 2] = sum(arr) + return arr[n % 2] def test() -> None: diff --git a/exercises/fibonacci_tail/solution.py b/exercises/fibonacci_tail/solution.py index 1dbb03b..b559659 100644 --- a/exercises/fibonacci_tail/solution.py +++ b/exercises/fibonacci_tail/solution.py @@ -1,9 +1,10 @@ -SUBMIT = False +SUBMIT = True def fibonacci_tail(n: int, a: int = 0, b: int = 1) -> int: - """Tail Recursive Fibonacci""" - pass + if(n <= 0): + return a + return fibonacci_tail(n - 1, b, a + b) def test() -> None: diff --git a/exercises/hello_world/solution.py b/exercises/hello_world/solution.py index 19b776e..42e8983 100644 --- a/exercises/hello_world/solution.py +++ b/exercises/hello_world/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def hello_world() -> str: @@ -8,7 +8,7 @@ def hello_world() -> str: >>> hello_world() 'Hello, World!' """ - return "" + return "Hello, World!" def test() -> None: diff --git a/exercises/linear_search/solution.py b/exercises/linear_search/solution.py index ad4cb38..20f1825 100644 --- a/exercises/linear_search/solution.py +++ b/exercises/linear_search/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def linear_search(_items: list[int], _target: int) -> int: @@ -12,7 +12,11 @@ def linear_search(_items: list[int], _target: int) -> int: >>> linear_search([], 5) -1 """ - return 0 + n = len(_items) + for i in range(n): + if(_items[i] == _target): + return i + return -1 def test() -> None: diff --git a/exercises/list_average/solution.py b/exercises/list_average/solution.py index 48fdf47..cbdcff6 100644 --- a/exercises/list_average/solution.py +++ b/exercises/list_average/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def list_average(_numbers: list[float]) -> float: @@ -10,7 +10,12 @@ def list_average(_numbers: list[float]) -> float: >>> list_average([10, 20, 30]) 20.0 """ - return 0.0 + n = len(_numbers) + if(n <= 0): return 0 + _sum = 0 + for i in range(n): + _sum += _numbers[i] + return _sum / n def test() -> None: diff --git a/exercises/list_mode/solution.py b/exercises/list_mode/solution.py index 304c15a..6ffc5a2 100644 --- a/exercises/list_mode/solution.py +++ b/exercises/list_mode/solution.py @@ -1,6 +1,6 @@ from typing import Any -SUBMIT = False +SUBMIT = True def list_mode(_items: list[Any]) -> Any: @@ -12,7 +12,19 @@ def list_mode(_items: list[Any]) -> Any: >>> list_mode(['a', 'b', 'a']) 'a' """ - return None + if(_items.__len__() <= 0): + return None + _map = {} + for item in _items: + if item in _map: + _map[item] += 1 + else: + _map[item] = 1 + _item, _num = _items[0], _map[_items[0]] + for item, num in _map.items(): + if(num > _num): + _item, _num = item, num + return _item def test() -> None: diff --git a/exercises/matrix_add/solution.py b/exercises/matrix_add/solution.py index 53deb25..4d7e9e9 100644 --- a/exercises/matrix_add/solution.py +++ b/exercises/matrix_add/solution.py @@ -1,17 +1,21 @@ -SUBMIT = False +SUBMIT = True def matrix_add(mat1: list[list[int | float]], mat2: list[list[int | float]]) -> list[list[int | float]]: """Adds two matrices.""" # Placeholder implementation - _ = mat1 - _ = mat2 - return [] + n = len(mat1) + m = len(mat1[0]) + mat = [[0] * m] * n + for i in range(n): + for j in range(m): + mat[i][j] = mat1[i][j] + mat2[i][j] + return mat def test() -> None: """Simple self-test for Matrix Addition.""" - cases = [(([1, 2], [3, 4]), [4, 6])] # Example matrices + cases = [(([[1, 2]], [[3, 4]]), [[4, 6]])] # Example matrices for input_data, expected in cases: try: res = matrix_add(*input_data) diff --git a/exercises/matrix_trace/solution.py b/exercises/matrix_trace/solution.py index 8c1f733..28a2c0f 100644 --- a/exercises/matrix_trace/solution.py +++ b/exercises/matrix_trace/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def matrix_trace(mat: list[list[int | float]]) -> int | float: diff --git a/exercises/min_max_list/solution.py b/exercises/min_max_list/solution.py index fa46d23..3655175 100644 --- a/exercises/min_max_list/solution.py +++ b/exercises/min_max_list/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def min_max_list(_items: list[int]) -> tuple[int, int] | None: @@ -12,7 +12,13 @@ def min_max_list(_items: list[int]) -> tuple[int, int] | None: >>> min_max_list([]) None """ - return (0, 0) + n = len(_items) + if(n <= 0): return None + _min, _max = _items[0], _items[0] + for i in range(1, n): + _min = min(_items[i], _min) + _max = max(_items[i], _max) + return (_min, _max) def test() -> None: diff --git a/exercises/palindrome/solution.py b/exercises/palindrome/solution.py index 7664e28..6d913d5 100644 --- a/exercises/palindrome/solution.py +++ b/exercises/palindrome/solution.py @@ -1,17 +1,12 @@ -SUBMIT = False +SUBMIT = True def palindrome(_text: str) -> bool: - # noqa: ARG001 - """Checks if a string is a palindrome. - - Example usage: - >>> palindrome("racecar") - True - >>> palindrome("hello") - False - """ - return False + n = len(_text) + for i in range(n // 2): + if(_text[i] != _text[n - 1 - i]): + return False + return True def test() -> None: diff --git a/exercises/personalized_greeting/solution.py b/exercises/personalized_greeting/solution.py index aed3a12..1e53057 100644 --- a/exercises/personalized_greeting/solution.py +++ b/exercises/personalized_greeting/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def personalized_greeting(_name: str, _age: int) -> str: @@ -11,7 +11,7 @@ def personalized_greeting(_name: str, _age: int) -> str: >>> personalized_greeting("Bob", 30) 'Hello Bob, you are 30 years old' """ - return "" + return f"Hello {_name}, you are {_age} years old" def test() -> None: diff --git a/exercises/poly_add/solution.py b/exercises/poly_add/solution.py index c6932aa..8e21012 100644 --- a/exercises/poly_add/solution.py +++ b/exercises/poly_add/solution.py @@ -1,18 +1,22 @@ -SUBMIT = False +SUBMIT = True def poly_add(poly1: list[int | float], poly2: list[int | float]) -> list[int | float]: """Adds two polynomials.""" - _poly1 = poly1 - _poly2 = poly2 - # Placeholder implementation: Add actual logic here. - # For now, return an empty list to pass initial checks. - return [] + poly_min, poly_max = None, None + if(len(poly1) > len(poly2)): + poly_min, poly_max = poly2, poly1[:] + else: + poly_min, poly_max = poly1, poly2[:] + offset = len(poly_max) - len(poly_min) + for i in range(len(poly_min)): + poly_max[offset + i] += poly_min[i] + return poly_max def test() -> None: """Simple self-test for Polynomial Addition.""" - cases = [(([1, 2], [3, 4]), [4, 6]), (([1, 0, 1], [1, 1]), [1, 1, 1])] + cases = [(([1, 2], [3, 4]), [4, 6]), (([1, 0, 1], [1, 1]), [1, 1, 2])] for input_data, expected in cases: try: res = poly_add(*input_data) diff --git a/exercises/poly_evaluate/solution.py b/exercises/poly_evaluate/solution.py index b1c4db3..d628ac8 100644 --- a/exercises/poly_evaluate/solution.py +++ b/exercises/poly_evaluate/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def poly_evaluate(poly: list[int | float], x: int | float) -> int | float: @@ -11,10 +11,10 @@ def poly_evaluate(poly: list[int | float], x: int | float) -> int | float: def test() -> None: """Simple self-test for Polynomial Evaluation.""" - cases = [(([1, 2, 3], 2), 17), (([5], 3), 5), ([], 0), (([1, -1, 1], 1), 1)] + cases = [(([1, 2, 3], 2), 17), (([5], 3), 5), (([], 0), 0), (([1, -1, 1], 1), 1)] for input_data, expected in cases: try: - res = poly_evaluate(*input_data) + res = poly_evaluate(input_data[0], input_data[1]) assert abs(res - expected) < 1e-9, ( f"Failed for input {input_data}: expected {expected}, got {res}" ) diff --git a/exercises/poly_mul/solution.py b/exercises/poly_mul/solution.py index ee4fab3..cc9134a 100644 --- a/exercises/poly_mul/solution.py +++ b/exercises/poly_mul/solution.py @@ -1,12 +1,14 @@ -SUBMIT = False +SUBMIT = True def poly_mul(poly1: list[int | float], poly2: list[int | float]) -> list[int | float]: """Multiplies two polynomials.""" - _poly1 = poly1 - _poly2 = poly2 - # Placeholder implementation - return [] + n1, n2 = len(poly1), len(poly2) + poly = [0] * (n1 + n2 - 1) + for i, v1 in enumerate(poly1): + for j, v2 in enumerate(poly2): + poly[i + j] += v1 * v2 + return poly def test() -> None: diff --git a/exercises/prefix_sums/solution.py b/exercises/prefix_sums/solution.py index 1e3d167..17c9af0 100644 --- a/exercises/prefix_sums/solution.py +++ b/exercises/prefix_sums/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def prefix_sums(_numbers: list[int]) -> list[int]: @@ -10,7 +10,11 @@ def prefix_sums(_numbers: list[int]) -> list[int]: >>> prefix_sums([10, -10, 5]) [10, 0, 5] """ - return [] + arr = _numbers[:] + n = len(arr) + for i in range(1, n): + arr[i] += arr[i - 1] + return arr def test() -> None: diff --git a/exercises/prime_check/solution.py b/exercises/prime_check/solution.py index 3cb981b..9964dfe 100644 --- a/exercises/prime_check/solution.py +++ b/exercises/prime_check/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def prime_check(_n: int) -> bool: @@ -13,12 +13,19 @@ def prime_check(_n: int) -> bool: >>> prime_check(17) True """ - return False + if(_n < 2): + return False + i = 2 + while(i * i <= _n): + if((_n % i) == 0): + return False + i += 1 + return True def test() -> None: """Simple self-test for Primality Test.""" - cases = {2: True, 4: False, 17: True, 1: False, 0: False, 97: True} + cases = {2: True, 4: False, 17: True, 1: False, 0: False, 97: True, 5: True, 15: False} for n, expected in cases.items(): try: res = prime_check(n) diff --git a/exercises/recursive_min_max/solution.py b/exercises/recursive_min_max/solution.py index c9fcfce..6065288 100644 --- a/exercises/recursive_min_max/solution.py +++ b/exercises/recursive_min_max/solution.py @@ -1,11 +1,21 @@ -SUBMIT = False +SUBMIT = True def recursive_min_max( lst: list[int], low: int = 0, high: int | None = None ) -> tuple[int, int]: - """Recursive Min/Max""" - pass + if(high is None): + high = len(lst) - 1 + + if(low == high): + return lst[low], lst[low] + + mid = (low + high) // 2 + _min0, _max0 = recursive_min_max(lst, low, mid) + _min1, _max1 = recursive_min_max(lst, mid + 1, high) + + return min(_min0, _min1), max(_max0, _max1) + def test() -> None: diff --git a/exercises/simple_interest/solution.py b/exercises/simple_interest/solution.py index 944bc7f..8a5fb7e 100644 --- a/exercises/simple_interest/solution.py +++ b/exercises/simple_interest/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def simple_interest(_principal: float, _rate: float, _time: float) -> float: @@ -11,7 +11,7 @@ def simple_interest(_principal: float, _rate: float, _time: float) -> float: >>> simple_interest(500, 3.5, 1) 17.5 """ - return 0.0 + return (_principal * _rate * _time) / 100 def test() -> None: diff --git a/exercises/string_reversal/solution.py b/exercises/string_reversal/solution.py index 9f36e58..2128385 100644 --- a/exercises/string_reversal/solution.py +++ b/exercises/string_reversal/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def string_reversal(s: str) -> str: # noqa: ARG001 @@ -7,7 +7,10 @@ def string_reversal(s: str) -> str: # noqa: ARG001 """ # Add a basic assert to the stub to satisfy the test assert True, "Placeholder assert for string reversal" # Placeholder assert - return "" + _s = "" + for char in reversed(s): + _s += char + return _s def test() -> None: diff --git a/exercises/sum_list_recursive/solution.py b/exercises/sum_list_recursive/solution.py index d041b78..07d7759 100644 --- a/exercises/sum_list_recursive/solution.py +++ b/exercises/sum_list_recursive/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def sum_list_recursive(lst: list[int]) -> int: diff --git a/exercises/sum_two_numbers/solution.py b/exercises/sum_two_numbers/solution.py index 6bed6c8..a4c44a2 100644 --- a/exercises/sum_two_numbers/solution.py +++ b/exercises/sum_two_numbers/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def sum_two_numbers(_a: int, _b: int) -> int: @@ -13,7 +13,7 @@ def sum_two_numbers(_a: int, _b: int) -> int: >>> sum_two_numbers(0, 0) 0 """ - return 0 + return _a + _b def test() -> None: diff --git a/exercises/variable_swap/solution.py b/exercises/variable_swap/solution.py index cceb784..9539d3a 100644 --- a/exercises/variable_swap/solution.py +++ b/exercises/variable_swap/solution.py @@ -1,6 +1,6 @@ from typing import Any -SUBMIT = False +SUBMIT = True def variable_swap(a: Any, b: Any) -> tuple[Any, Any]: @@ -12,7 +12,7 @@ def variable_swap(a: Any, b: Any) -> tuple[Any, Any]: >>> variable_swap("hello", "world") ('world', 'hello') """ - return a, b + return b, a def test() -> None: diff --git a/exercises/word_count/solution.py b/exercises/word_count/solution.py index 41c9a8d..2d5cc9d 100644 --- a/exercises/word_count/solution.py +++ b/exercises/word_count/solution.py @@ -1,4 +1,4 @@ -SUBMIT = False +SUBMIT = True def word_count(s: str) -> int: