Skip to content

Commit

Permalink
Merge pull request #20 from MIT-Emerging-Talent/02-challenge-sponge-case
Browse files Browse the repository at this point in the history
Solution for Sponge Case Challenge
  • Loading branch information
RamonColmenares authored Dec 30, 2024
2 parents 4b326d3 + 6353137 commit 9cd4d5b
Show file tree
Hide file tree
Showing 8 changed files with 138 additions and 71 deletions.
1 change: 0 additions & 1 deletion solutions/README.md

This file was deleted.

20 changes: 20 additions & 0 deletions solutions/challenge_2/README.md
Original file line number Diff line number Diff line change
@@ -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)
Empty file.
39 changes: 39 additions & 0 deletions solutions/challenge_2/spongecase.py
Original file line number Diff line number Diff line change
@@ -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)
59 changes: 0 additions & 59 deletions solutions/tests/README.md

This file was deleted.

Empty file.
79 changes: 79 additions & 0 deletions solutions/tests/challenge_2/test_spongecase.py
Original file line number Diff line number Diff line change
@@ -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")
11 changes: 0 additions & 11 deletions solutions/tests/test_example.py

This file was deleted.

0 comments on commit 9cd4d5b

Please sign in to comment.