aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Green <mail@simon.green>2024-05-12 16:20:35 +1000
committerSimon Green <mail@simon.green>2024-05-12 16:20:35 +1000
commit94fa0af4c1fe01c119e5f0081d35eaf02528cf30 (patch)
tree377e1b5c4974265c8696d3b0769827e973f44c51
parenta25f22449decd32a0999053f193c19f183c6a33e (diff)
downloadperlweeklychallenge-club-94fa0af4c1fe01c119e5f0081d35eaf02528cf30.tar.gz
perlweeklychallenge-club-94fa0af4c1fe01c119e5f0081d35eaf02528cf30.tar.bz2
perlweeklychallenge-club-94fa0af4c1fe01c119e5f0081d35eaf02528cf30.zip
sgreen solutions to challenge 268
-rw-r--r--challenge-267/sgreen/README.md3
-rw-r--r--challenge-268/sgreen/README.md4
-rw-r--r--challenge-268/sgreen/blog.txt0
-rwxr-xr-xchallenge-268/sgreen/perl/ch-1.pl38
-rwxr-xr-xchallenge-268/sgreen/perl/ch-2.pl26
-rwxr-xr-xchallenge-268/sgreen/python/ch-1.py39
-rwxr-xr-xchallenge-268/sgreen/python/ch-2.py29
-rwxr-xr-xchallenge-268/sgreen/python/test.py24
8 files changed, 158 insertions, 5 deletions
diff --git a/challenge-267/sgreen/README.md b/challenge-267/sgreen/README.md
deleted file mode 100644
index 0a7e07635b..0000000000
--- a/challenge-267/sgreen/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# The Weekly Challenge 266
-
-Blog: [Uncommon matrix](https://dev.to/simongreennet/uncommon-matrix-4mfh)
diff --git a/challenge-268/sgreen/README.md b/challenge-268/sgreen/README.md
index 0a7e07635b..4ca66a36ae 100644
--- a/challenge-268/sgreen/README.md
+++ b/challenge-268/sgreen/README.md
@@ -1,3 +1,3 @@
-# The Weekly Challenge 266
+# The Weekly Challenge 268
-Blog: [Uncommon matrix](https://dev.to/simongreennet/uncommon-matrix-4mfh)
+Blog: [The magical number game](https://dev.to/simongreennet/the-magical-number-game-4jgo)
diff --git a/challenge-268/sgreen/blog.txt b/challenge-268/sgreen/blog.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/challenge-268/sgreen/blog.txt
diff --git a/challenge-268/sgreen/perl/ch-1.pl b/challenge-268/sgreen/perl/ch-1.pl
new file mode 100755
index 0000000000..3859c01ad3
--- /dev/null
+++ b/challenge-268/sgreen/perl/ch-1.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use experimental 'signatures';
+
+sub main (@ints) {
+ # Check we an even number of items
+ if ( $#ints % 2 == 0 ) {
+ die "Please provide an even number of items!\n";
+ }
+
+ # Split the list in to two
+ my $half = scalar(@ints) / 2;
+ my @x = @ints[ 0 .. $half - 1 ];
+ my @y = @ints[ $half .. $#ints ];
+
+ # Sort the lists
+ @x = sort { $a <=> $b } @x;
+ @y = sort { $a <=> $b } @y;
+
+ # Calculate the difference between the first values
+ my $diff = $y[0] - $x[0];
+
+ foreach my $i ( 0 .. $#x ) {
+ if ( $y[$i] - $x[$i] != $diff ) {
+ # There is no single magic number
+ say 'No magic number found!';
+ return;
+ }
+ }
+
+ # Return the magic number
+ say $diff;
+}
+
+main(@ARGV); \ No newline at end of file
diff --git a/challenge-268/sgreen/perl/ch-2.pl b/challenge-268/sgreen/perl/ch-2.pl
new file mode 100755
index 0000000000..9d9d8d507c
--- /dev/null
+++ b/challenge-268/sgreen/perl/ch-2.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use experimental 'signatures';
+
+sub main (@ints) {
+ # Check we an even number of items
+ if ( $#ints % 2 == 0 ) {
+ die "Please provide an even number of items!\n";
+ }
+
+ # Sort the lists
+ @ints = sort { $a <=> $b } @ints;
+
+ for ( my $i = 0 ; $i <= $#ints ; $i += 2 ) {
+ # Switch the pairs of numbers around
+ ( $ints[$i], $ints[ $i + 1 ] ) = ( $ints[ $i + 1 ], $ints[$i] );
+ }
+
+ # Print the result
+ say '(', join( ', ', @ints ), ')';
+}
+
+main(@ARGV); \ No newline at end of file
diff --git a/challenge-268/sgreen/python/ch-1.py b/challenge-268/sgreen/python/ch-1.py
new file mode 100755
index 0000000000..5566e1437b
--- /dev/null
+++ b/challenge-268/sgreen/python/ch-1.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+
+import sys
+
+
+def magic_number(x: list, y: list) -> int | None:
+ # Check we have equal length lists
+ if len(x) != len(y):
+ raise ValueError('Lists must be of the same length')
+
+ # Sort the lists
+ x = sorted(x)
+ y = sorted(y)
+
+ # Calculate the difference between the first values
+ diff = y[0] - x[0]
+
+ for i in range(len(x)):
+ if y[i] - x[i] != diff:
+ # There is no single magic number
+ return None
+
+ # Return the magic number
+ return diff
+
+
+def main():
+ # Convert input into integers
+ array = [int(n) for n in sys.argv[1:]]
+ half = len(array) // 2
+ result = magic_number(array[:half], array[half:])
+ if result:
+ print(result)
+ else:
+ print('No magic number found!')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/challenge-268/sgreen/python/ch-2.py b/challenge-268/sgreen/python/ch-2.py
new file mode 100755
index 0000000000..d0abc6522c
--- /dev/null
+++ b/challenge-268/sgreen/python/ch-2.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+
+import sys
+
+
+def numbers_game(ints: list) -> list:
+ # Check we have an even number of items
+ if len(ints) % 2 != 0:
+ raise ValueError('Please provide an even number of items!')
+
+ # Sort the list
+ ints = sorted(ints)
+
+ for i in range(0, len(ints), 2):
+ # Switch the pairs of numbers around
+ ints[i], ints[i+1], = ints[i+1], ints[i]
+
+ return ints
+
+
+def main():
+ # Convert input into integers
+ array = [int(n) for n in sys.argv[1:]]
+ result = numbers_game(array)
+ print(tuple(result))
+
+
+if __name__ == '__main__':
+ main()
diff --git a/challenge-268/sgreen/python/test.py b/challenge-268/sgreen/python/test.py
new file mode 100755
index 0000000000..681f2f8d21
--- /dev/null
+++ b/challenge-268/sgreen/python/test.py
@@ -0,0 +1,24 @@
+#!/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.magic_number([3, 7, 5], [9, 5, 7]), 2)
+ self.assertEqual(ch_1.magic_number([1, 2, 1], [5, 4, 4]), 3)
+ self.assertEqual(ch_1.magic_number([2], [5]), 3)
+
+ def test_ch_2(self):
+ self.assertEqual(ch_2.numbers_game([2, 5, 3, 4]), [3, 2, 5, 4])
+ self.assertEqual(
+ ch_2.numbers_game([9, 4, 1, 3, 6, 4, 6, 1]),
+ [1, 1, 4, 3, 6, 4, 9, 6]
+ )
+ self.assertEqual(ch_2.numbers_game([1, 2, 2, 3]), [2, 1, 3, 2])
+
+
+if __name__ == '__main__':
+ unittest.main()