aboutsummaryrefslogtreecommitdiff
path: root/challenge-307
diff options
context:
space:
mode:
authorSimon Green <mail@simon.green>2025-02-09 14:08:23 +1100
committerSimon Green <mail@simon.green>2025-02-09 14:08:23 +1100
commit8a684ce522b76fd7ba92d2455068cdf7d32912f6 (patch)
tree79ab016493682f5a56239ad5e95769649065e292 /challenge-307
parent75cad926933996bff61b6684c63344fddbb4ea79 (diff)
downloadperlweeklychallenge-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.md4
-rw-r--r--challenge-307/sgreen/blog.txt1
-rwxr-xr-xchallenge-307/sgreen/perl/ch-1.pl25
-rwxr-xr-xchallenge-307/sgreen/perl/ch-2.pl28
-rwxr-xr-xchallenge-307/sgreen/python/ch-1.py29
-rwxr-xr-xchallenge-307/sgreen/python/ch-2.py26
-rwxr-xr-xchallenge-307/sgreen/python/test.py25
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()