aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Green <mail@simon.green>2025-07-13 22:16:28 +1000
committerSimon Green <mail@simon.green>2025-07-13 22:16:28 +1000
commit864c708aecefc7d2acd14f07a4f86b4a9c2e8082 (patch)
treeb0b180f8a0c5b2a16fd93688f4ef31fbf30e0c4f
parentbd7fce4bd5d085c209a213f2daca1e79799c9e87 (diff)
downloadperlweeklychallenge-club-864c708aecefc7d2acd14f07a4f86b4a9c2e8082.tar.gz
perlweeklychallenge-club-864c708aecefc7d2acd14f07a4f86b4a9c2e8082.tar.bz2
perlweeklychallenge-club-864c708aecefc7d2acd14f07a4f86b4a9c2e8082.zip
sgreen solutions to challenge 329
-rw-r--r--challenge-329/sgreen/README.md4
-rwxr-xr-xchallenge-329/sgreen/python/ch-1.py28
-rwxr-xr-xchallenge-329/sgreen/python/ch-2.py38
-rwxr-xr-xchallenge-329/sgreen/python/test.py21
4 files changed, 89 insertions, 2 deletions
diff --git a/challenge-329/sgreen/README.md b/challenge-329/sgreen/README.md
index 57261d9d9b..f06345033b 100644
--- a/challenge-329/sgreen/README.md
+++ b/challenge-329/sgreen/README.md
@@ -1,3 +1,3 @@
-# The Weekly Challenge 328
+# The Weekly Challenge 329
-Blog: [A good question](https://dev.to/simongreennet/weekly-challenge-a-good-question-3e3p)
+No blog this week, sorry.
diff --git a/challenge-329/sgreen/python/ch-1.py b/challenge-329/sgreen/python/ch-1.py
new file mode 100755
index 0000000000..2ea1973cdb
--- /dev/null
+++ b/challenge-329/sgreen/python/ch-1.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python3
+
+import re
+import sys
+
+
+def counter_integers(input_string: str) -> list[int]:
+ # Find all integers in string
+ m = re.findall(r"\d+", input_string)
+
+ # Convert to integers
+ solution = []
+
+ for i in map(int, m):
+ # Add them if they don't already appear
+ if i not in solution:
+ solution.append(i)
+
+ return solution
+
+
+def main():
+ result = counter_integers(sys.argv[1])
+ print(', '.join(map(str, result)))
+
+
+if __name__ == '__main__':
+ main()
diff --git a/challenge-329/sgreen/python/ch-2.py b/challenge-329/sgreen/python/ch-2.py
new file mode 100755
index 0000000000..a06379efe2
--- /dev/null
+++ b/challenge-329/sgreen/python/ch-2.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+
+import sys
+
+def is_nice_string(s: str) -> bool:
+ # Check that every letter has a matching letter in the opposite case
+ for letter in s:
+ if letter.islower() and letter.upper() not in s:
+ return False
+ if letter.isupper() and letter.lower() not in s:
+ return False
+ return True
+
+
+def nice_string(input_string: str) -> str|None:
+ solution = None
+ # Calculate every combination of starting and ending positions
+ for start in range(len(input_string)-1):
+ for end in range(start+2, len(input_string)+1):
+ # See if this is a nice string
+ extract = input_string[start:end]
+ if is_nice_string(extract):
+ # If it is longer than the current nice string, update the solution variable
+ if solution is None or len(solution) < len(extract):
+ solution = extract
+
+ return solution
+
+
+def main():
+ result = nice_string(sys.argv[1])
+ if result is None:
+ result = ''
+ print('"'+result+'"')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/challenge-329/sgreen/python/test.py b/challenge-329/sgreen/python/test.py
new file mode 100755
index 0000000000..4fa937d456
--- /dev/null
+++ b/challenge-329/sgreen/python/test.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python3
+
+import unittest
+ch_1 = __import__("ch-1")
+ch_2 = __import__("ch-2")
+
+
+class TestClass(unittest.TestCase):
+ def test_ch_1(self):
+ self.assertEqual(ch_1.counter_integers("the1weekly2challenge2"), [1, 2])
+ self.assertEqual(ch_1.counter_integers("go21od1lu5c7k"), [21, 1, 5, 7])
+ self.assertEqual(ch_1.counter_integers("4p3e2r1l"), [4, 3, 2, 1])
+
+ def test_ch_2(self):
+ self.assertEqual(ch_2.nice_string("YaaAho"), "aaA")
+ self.assertEqual(ch_2.nice_string("cC"), "cC")
+ self.assertEqual(ch_2.nice_string("A"), None)
+
+
+if __name__ == "__main__":
+ unittest.main()