diff options
| author | Simon Green <mail@simon.green> | 2025-02-09 14:08:23 +1100 |
|---|---|---|
| committer | Simon Green <mail@simon.green> | 2025-02-09 14:08:23 +1100 |
| commit | 8a684ce522b76fd7ba92d2455068cdf7d32912f6 (patch) | |
| tree | 79ab016493682f5a56239ad5e95769649065e292 /challenge-307 | |
| parent | 75cad926933996bff61b6684c63344fddbb4ea79 (diff) | |
| download | perlweeklychallenge-club-8a684ce522b76fd7ba92d2455068cdf7d32912f6.tar.gz perlweeklychallenge-club-8a684ce522b76fd7ba92d2455068cdf7d32912f6.tar.bz2 perlweeklychallenge-club-8a684ce522b76fd7ba92d2455068cdf7d32912f6.zip | |
sgreen solutions to challenge 307
Diffstat (limited to 'challenge-307')
| -rw-r--r-- | challenge-307/sgreen/README.md | 4 | ||||
| -rw-r--r-- | challenge-307/sgreen/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-307/sgreen/perl/ch-1.pl | 25 | ||||
| -rwxr-xr-x | challenge-307/sgreen/perl/ch-2.pl | 28 | ||||
| -rwxr-xr-x | challenge-307/sgreen/python/ch-1.py | 29 | ||||
| -rwxr-xr-x | challenge-307/sgreen/python/ch-2.py | 26 | ||||
| -rwxr-xr-x | challenge-307/sgreen/python/test.py | 25 |
7 files changed, 136 insertions, 2 deletions
diff --git a/challenge-307/sgreen/README.md b/challenge-307/sgreen/README.md index c4195b4620..75cb943e9b 100644 --- a/challenge-307/sgreen/README.md +++ b/challenge-307/sgreen/README.md @@ -1,3 +1,3 @@ -# The Weekly Challenge 306 +# The Weekly Challenge 307 -Blog: [The last odd](https://dev.to/simongreennet/the-last-odd-kib) +Blog: [Sorting and counting](https://dev.to/simongreennet/weekly-challenge-sorting-and-counting-2on) diff --git a/challenge-307/sgreen/blog.txt b/challenge-307/sgreen/blog.txt new file mode 100644 index 0000000000..7521b12b17 --- /dev/null +++ b/challenge-307/sgreen/blog.txt @@ -0,0 +1 @@ +https://dev.to/simongreennet/weekly-challenge-sorting-and-counting-2on
\ No newline at end of file diff --git a/challenge-307/sgreen/perl/ch-1.pl b/challenge-307/sgreen/perl/ch-1.pl new file mode 100755 index 0000000000..45cf2e8a67 --- /dev/null +++ b/challenge-307/sgreen/perl/ch-1.pl @@ -0,0 +1,25 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use experimental 'signatures'; + +sub main (@ints) { + # Sort the lists numerically + my @sorted_ints = sort { $a <=> $b } @ints; + my @differences = (); + + foreach my $idx ( 0 .. $#ints ) { + if ( $ints[$idx] != $sorted_ints[$idx] ) { + # If the value in the original list and sorted list at this + # position is different, add it to the differences list. + push @differences, $idx; + } + } + + # Return the list + say '(', join( ', ', @differences ), ')'; +} + +main(@ARGV); diff --git a/challenge-307/sgreen/perl/ch-2.pl b/challenge-307/sgreen/perl/ch-2.pl new file mode 100755 index 0000000000..338581543d --- /dev/null +++ b/challenge-307/sgreen/perl/ch-2.pl @@ -0,0 +1,28 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use experimental 'signatures'; + +sub sort_word($word) { + return join( '', sort split( //, lc($word) ) ); +} + +sub main (@words) { + # Sort each word alphabetically, ignoring case + my @sorted_words = map { sort_word($_) } @words; + my $anagrams = 0; + + foreach my $idx ( 1 .. $#words ) { + if ( $sorted_words[ $idx - 1 ] eq $sorted_words[$idx] ) { + # The word at this position is an anagram of the previous word + $anagrams++; + } + } + + # Return the number of words that aren't an anagram + say scalar(@words) - $anagrams; +} + +main(@ARGV); diff --git a/challenge-307/sgreen/python/ch-1.py b/challenge-307/sgreen/python/ch-1.py new file mode 100755 index 0000000000..cc227d0d95 --- /dev/null +++ b/challenge-307/sgreen/python/ch-1.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 + +import sys + + +def check_order(ints: list) -> str: + # Sort the lists numerically + sorted_ints = sorted(ints) + differences = [] + + for idx in range(len(ints)): + if ints[idx] != sorted_ints[idx]: + # If the value in the original list and sorted list at this + # position is different, add it to the differences list. + differences.append(idx) + + # Return the list + return differences + + +def main(): + # Convert input into integers + array = [int(n) for n in sys.argv[1:]] + result = check_order(array) + print(result) + + +if __name__ == '__main__': + main() diff --git a/challenge-307/sgreen/python/ch-2.py b/challenge-307/sgreen/python/ch-2.py new file mode 100755 index 0000000000..14f80dc96e --- /dev/null +++ b/challenge-307/sgreen/python/ch-2.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 + +import sys + + +def find_anagrams(words: list) -> list: + # Sort each word alphabetically, ignoring case + sorted_words = [''.join(sorted(word.lower())) for word in words] + anagrams = 0 + + for idx in range(1, len(words)): + if sorted_words[idx-1] == sorted_words[idx]: + # The word at this position is an anagram of the previous word + anagrams += 1 + + # Return the number of words that aren't an anagram + return len(words) - anagrams + + +def main(): + result = find_anagrams(sys.argv[1:]) + print(result) + + +if __name__ == '__main__': + main() diff --git a/challenge-307/sgreen/python/test.py b/challenge-307/sgreen/python/test.py new file mode 100755 index 0000000000..965631aecf --- /dev/null +++ b/challenge-307/sgreen/python/test.py @@ -0,0 +1,25 @@ +#!/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.check_order([5, 2, 4, 3, 1]), [0, 2, 3, 4]) + self.assertEqual(ch_1.check_order([1, 2, 1, 1, 3]), [1, 3]) + self.assertEqual(ch_1.check_order([3, 1, 3, 2, 3]), [0, 1, 3]) + + def test_ch_2(self): + words_1 = ["acca", "dog", "god", "perl", "repl"] + words_2 = ["abba", "baba", "aabb", "ab", "ab"] + words_3 = ["abba", "baba", "ab", "ab", "aabb"] + + self.assertEqual(ch_2.find_anagrams(words_1), 3) + self.assertEqual(ch_2.find_anagrams(words_2), 2) + self.assertEqual(ch_2.find_anagrams(words_3), 3) + + +if __name__ == '__main__': + unittest.main() |
