diff options
| author | Simon Green <mail@simon.green> | 2024-05-12 16:20:35 +1000 |
|---|---|---|
| committer | Simon Green <mail@simon.green> | 2024-05-12 16:20:35 +1000 |
| commit | 94fa0af4c1fe01c119e5f0081d35eaf02528cf30 (patch) | |
| tree | 377e1b5c4974265c8696d3b0769827e973f44c51 | |
| parent | a25f22449decd32a0999053f193c19f183c6a33e (diff) | |
| download | perlweeklychallenge-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.md | 3 | ||||
| -rw-r--r-- | challenge-268/sgreen/README.md | 4 | ||||
| -rw-r--r-- | challenge-268/sgreen/blog.txt | 0 | ||||
| -rwxr-xr-x | challenge-268/sgreen/perl/ch-1.pl | 38 | ||||
| -rwxr-xr-x | challenge-268/sgreen/perl/ch-2.pl | 26 | ||||
| -rwxr-xr-x | challenge-268/sgreen/python/ch-1.py | 39 | ||||
| -rwxr-xr-x | challenge-268/sgreen/python/ch-2.py | 29 | ||||
| -rwxr-xr-x | challenge-268/sgreen/python/test.py | 24 |
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() |
