diff options
| author | Scimon <simon.proctor@gmail.com> | 2025-09-15 09:31:19 +0100 |
|---|---|---|
| committer | Scimon <simon.proctor@gmail.com> | 2025-09-15 09:31:19 +0100 |
| commit | 916d9d6a2edd1b5a32312ff64491a25fea979ca9 (patch) | |
| tree | c34863d765478e9db08a4d513f52948fdadd57e2 | |
| parent | f78ccc41e5c6cbc1a2c0f5823e6004b703e8ac0c (diff) | |
| download | perlweeklychallenge-club-916d9d6a2edd1b5a32312ff64491a25fea979ca9.tar.gz perlweeklychallenge-club-916d9d6a2edd1b5a32312ff64491a25fea979ca9.tar.bz2 perlweeklychallenge-club-916d9d6a2edd1b5a32312ff64491a25fea979ca9.zip | |
Challenge 1
| -rwxr-xr-x | challenge-339/simon-proctor/raku/ch-1.raku | 42 |
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; +} |
