diff --git a/solutions/README.md b/solutions/README.md deleted file mode 100644 index 9852346d2..000000000 --- a/solutions/README.md +++ /dev/null @@ -1 +0,0 @@ -# Solutions diff --git a/solutions/challenge_2/README.md b/solutions/challenge_2/README.md new file mode 100644 index 000000000..f27d2fb8c --- /dev/null +++ b/solutions/challenge_2/README.md @@ -0,0 +1,20 @@ +# Challenge: SpongeCase + +## Description + +SpongeCase is a style of text where letters alternately appear +in lower and upper case. +For example, the word in spongeCase would be `sPoNgEcAsE`. + +Write a function that converts the given string into spongeCase. + +## Example + +```python +spongecase("hello world") +# Output: "hElLo wOrLd" + +spongecase("Python") +# Output: "pYtHoN" + +- Challenge Link: [GitHub Issue](https://github.com/MIT-Emerging-Talent/ET6-foundations-group-04/issues/2) diff --git a/solutions/challenge_2/__init__.py b/solutions/challenge_2/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/solutions/challenge_2/spongecase.py b/solutions/challenge_2/spongecase.py new file mode 100644 index 000000000..9620e4407 --- /dev/null +++ b/solutions/challenge_2/spongecase.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +A module for converting strings into SpongeCase (alternating lower and upper case). + +Module contents: + - spongecase: Converts a string into SpongeCase + +Created on 28/12/2024 +Author: Chrismy Leprince Paul Augustin +""" + + +def spongecase(text: str) -> str: + """Converts a string into SpongeCase, where letters alternate between lower + and upper case, starting with lower case. + + Parameters: + text: str, a string to be converted into SpongeCase + + Returns -> str: The SpongeCase version of the input string + + Examples: + >>> spongecase("hello world") + 'hElLo wOrLd' + >>> spongecase("PYTHON") + 'pYtHoN' + >>> spongecase("HELLO!") + 'hElLo!' + """ + result_chars = [] + for index, char in enumerate(text): + if index % 2 == 0: + # Even index -> lowercase + result_chars.append(char.lower()) + else: + # Odd index -> uppercase + result_chars.append(char.upper()) + return "".join(result_chars) diff --git a/solutions/tests/README.md b/solutions/tests/README.md deleted file mode 100644 index b6eefe12e..000000000 --- a/solutions/tests/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# Tests - -This directory contains the unit tests for the project. -The tests are written using the `unittest` framework. - -## Running Tests - -To run the tests, use the following command: - -```sh -python -m unittest -``` - -This command will automatically discover and run all the test cases in this directory. - -## Directory Structure - -The tests are organized as follows: - -```md -solutions/ - tests/ - __init__.py - test_example.py -``` - -- `__init__.py`: This file makes the directory a Python package. -- `test_example.py`: This file contains example test cases. - -## Writing Tests - -To add new tests, create a new file in the `tests` directory -and define your test cases using the `unittest` framework. - -Here is an example of a simple test case: - -```python -import unittest - -class TestExample(unittest.TestCase): - def test_addition(self): - self.assertEqual(1 + 1, 2) - -``` - -## Test Coverage - -Ensure that your tests cover all the critical parts of your codebase. -Aim for high test coverage to catch potential issues early. - -## Contributing - -If you would like to contribute to the tests, please follow these guidelines: - -1. Write clear and concise test cases. -2. Ensure that your tests pass before submitting a pull request. -3. Follow the existing code style and conventions. - -Let's maintain a high-quality codebase! 👩‍💻✨🚀 diff --git a/solutions/tests/challenge_2/__init__.py b/solutions/tests/challenge_2/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/solutions/tests/challenge_2/test_spongecase.py b/solutions/tests/challenge_2/test_spongecase.py new file mode 100644 index 000000000..03ce70be2 --- /dev/null +++ b/solutions/tests/challenge_2/test_spongecase.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Test module for spongecase function. + +Test categories: + - Basic cases: typical strings, single words + - Edge cases: empty string, all uppercase, all lowercase + - Special characters: punctuation, digits, symbols + +Created on 2024-12-28 +Author: Chrismy Leprince Paul Augustin +""" + +import unittest + +from solutions.challenge_2.spongecase import spongecase + + +class TestSpongeCase(unittest.TestCase): + """Test suite for the spongecase function.""" + + def test_spongecase_basic(self): + """ + It should convert a typical string containing spaces into SpongeCase. + + Example: + "hello world" -> "hElLo wOrLd" + """ + self.assertEqual(spongecase("hello world"), "hElLo wOrLd") + + def test_spongecase_single_word(self): + """ + It should convert a single word into SpongeCase. + + Example: + "Python" -> "pYtHoN" + """ + self.assertEqual(spongecase("Python"), "pYtHoN") + + def test_spongecase_empty_string(self): + """ + It should handle an empty string by returning an empty string. + + Example: + "" -> "" + """ + self.assertEqual(spongecase(""), "") + + def test_spongecase_all_caps(self): + """ + It should convert an all-caps string into SpongeCase. + + Example: + "HELLO" -> "hElLo" + """ + self.assertEqual(spongecase("HELLO"), "hElLo") + + def test_spongecase_all_lowercase(self): + """ + It should convert an all-lowercase string into SpongeCase. + + Example: + "world" -> "wOrLd" + """ + self.assertEqual(spongecase("world"), "wOrLd") + + def test_spongecase_special_characters(self): + """ + It should alternate case while preserving special characters + and digits in place. + + Mapping indices: + Index: 0 1 2 3 4 5 6 7 8 9 + Char: H e l l o ? 1 # A b + Case: h E l L o ? 1 # a B + Result: "hElLo?1#aB" + """ + self.assertEqual(spongecase("Hello?1#Ab"), "hElLo?1#aB") diff --git a/solutions/tests/test_example.py b/solutions/tests/test_example.py deleted file mode 100644 index 5e6cd7a00..000000000 --- a/solutions/tests/test_example.py +++ /dev/null @@ -1,11 +0,0 @@ -"""Test example module.""" - -import unittest - - -class TestExample(unittest.TestCase): - """Test example class.""" - - def test_addition(self): - """Test addition method.""" - self.assertEqual(1 + 1, 2)