From 14e3b6da0addb9254f60382d16a7662b9e27241a Mon Sep 17 00:00:00 2001 From: Simon Green Date: Sun, 4 May 2025 21:47:29 +1000 Subject: sgreen solutions to challenge 319 --- challenge-319/sgreen/README.md | 4 ++-- challenge-319/sgreen/blog.txt | 1 + challenge-319/sgreen/python/ch-1.py | 17 +++++++++++++++++ challenge-319/sgreen/python/ch-2.py | 21 +++++++++++++++++++++ challenge-319/sgreen/python/test.py | 22 ++++++++++++++++++++++ 5 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 challenge-319/sgreen/blog.txt create mode 100755 challenge-319/sgreen/python/ch-1.py create mode 100755 challenge-319/sgreen/python/ch-2.py create mode 100755 challenge-319/sgreen/python/test.py diff --git a/challenge-319/sgreen/README.md b/challenge-319/sgreen/README.md index df76bedbff..2be75d9b36 100644 --- a/challenge-319/sgreen/README.md +++ b/challenge-319/sgreen/README.md @@ -1,3 +1,3 @@ -# The Weekly Challenge 318 +# The Weekly Challenge 319 -Blog: [Reverse Positions](https://dev.to/simongreennet/weekly-challenge-reverse-positions-3om3) +Blog: [Words and numbers](https://dev.to/simongreennet/words-and-numbers-54k6) diff --git a/challenge-319/sgreen/blog.txt b/challenge-319/sgreen/blog.txt new file mode 100644 index 0000000000..6179a8e827 --- /dev/null +++ b/challenge-319/sgreen/blog.txt @@ -0,0 +1 @@ +https://dev.to/simongreennet/words-and-numbers-54k6 \ No newline at end of file diff --git a/challenge-319/sgreen/python/ch-1.py b/challenge-319/sgreen/python/ch-1.py new file mode 100755 index 0000000000..f76b60e6e5 --- /dev/null +++ b/challenge-319/sgreen/python/ch-1.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import re +import sys + + +def word_count(words: list[str]) -> int: + return sum(1 for word in words if re.search('^[aeiou]', word) or re.search('[aeiou]$', word)) + + +def main(): + result = word_count(sys.argv[1:]) + print(result) + + +if __name__ == '__main__': + main() diff --git a/challenge-319/sgreen/python/ch-2.py b/challenge-319/sgreen/python/ch-2.py new file mode 100755 index 0000000000..8c0127500c --- /dev/null +++ b/challenge-319/sgreen/python/ch-2.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +import re +import sys + + +def minimum_common(list1: list[int], list2: list[int]) -> int: + intersection = set(list1) & set(list2) + return min(intersection) if intersection else -1 + + +def main(): + # Convert input into integers + list1 = map(int, re.split(r'\D+', sys.argv[1])) + list2 = map(int, re.split(r'\D+', sys.argv[2])) + result = minimum_common(list1, list2) + print(result) + + +if __name__ == '__main__': + main() diff --git a/challenge-319/sgreen/python/test.py b/challenge-319/sgreen/python/test.py new file mode 100755 index 0000000000..7a15abb379 --- /dev/null +++ b/challenge-319/sgreen/python/test.py @@ -0,0 +1,22 @@ +#!/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.word_count( + ["unicode", "xml", "raku", "perl"]), 2) + self.assertEqual(ch_1.word_count(["the", "weekly", "challenge"]), 2) + self.assertEqual(ch_1.word_count(["perl", "python", "postgres"]), 0) + + def test_ch_2(self): + self.assertEqual(ch_2.minimum_common([1, 2, 3, 4], [3, 4, 5, 6]), 3) + self.assertEqual(ch_2.minimum_common([1, 2, 3], [2, 4]), 2) + self.assertEqual(ch_2.minimum_common([1, 2, 3, 4], [5, 6, 7, 8]), -1) + + +if __name__ == '__main__': + unittest.main() -- cgit