aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScimon <simon.proctor@gmail.com>2025-09-15 09:31:19 +0100
committerScimon <simon.proctor@gmail.com>2025-09-15 09:31:19 +0100
commit916d9d6a2edd1b5a32312ff64491a25fea979ca9 (patch)
treec34863d765478e9db08a4d513f52948fdadd57e2
parentf78ccc41e5c6cbc1a2c0f5823e6004b703e8ac0c (diff)
downloadperlweeklychallenge-club-916d9d6a2edd1b5a32312ff64491a25fea979ca9.tar.gz
perlweeklychallenge-club-916d9d6a2edd1b5a32312ff64491a25fea979ca9.tar.bz2
perlweeklychallenge-club-916d9d6a2edd1b5a32312ff64491a25fea979ca9.zip
Challenge 1
-rwxr-xr-xchallenge-339/simon-proctor/raku/ch-1.raku42
1 files changed, 42 insertions, 0 deletions
diff --git a/challenge-339/simon-proctor/raku/ch-1.raku b/challenge-339/simon-proctor/raku/ch-1.raku
new file mode 100755
index 0000000000..75c843cfde
--- /dev/null
+++ b/challenge-339/simon-proctor/raku/ch-1.raku
@@ -0,0 +1,42 @@
+#!/usr/bin/env raku
+
+subset IsTrue of Bool where so *;
+
+multi sub MAIN( IsTrue :t(:$test) ) is hidden-from-USAGE {
+ use Test;
+ is max-diff(5, 9, 3, 4, 6), 42;
+ is max-diff(1, -2, 3, -4), 10;
+ is max-diff(-3, -1, -2, -4), 10;
+ is max-diff(10, 2, 0, 5, 1), 50;
+ is max-diff(7, 8, 9, 10, 10), 44;
+ is max-diff(1,-2,3,4), 14;
+ is max-diff(1,2,3,4,5,6,-10),80;
+ done-testing;
+}
+
+multi sub MAIN( *@ints where Int() ~~ all(*) ) {
+ max-diff( |@ints ).say;
+}
+
+multi sub max-diff( *@ints where all(@ints) >= 0 ) {
+ my @sorted = @ints.sort;
+ return (([*] @sorted.tail(2)) - ([*] @sorted.head(2)) );
+}
+
+multi sub max-diff( *@ints where all(@ints) <= 0 ) {
+ my @sorted = @ints.sort;
+ return (([*] @sorted.head(2)) - ([*] @sorted.tail(2)) );
+}
+
+multi sub max-diff( *@ints where *.elems > 4 ) {
+ @ints.combinations(4).map( -> @l { max-diff(|@l) } ).max;
+}
+
+multi sub max-diff( Int $a, Int $b, Int $c, Int $d ) {
+ ( ( ($a*$b)-($c*$d) ),
+ ( ($c*$d)-($a*$b) ),
+ ( ($a*$c)-($b*$d) ),
+ ( ($b*$d)-($a*$c) ),
+ ( ($a*$d)-($b*$c) ),
+ ( ($b*$c)-($a*$d) ) ).max;
+}