diff options
| -rwxr-xr-x | challenge-339/simon-proctor/raku/ch-1.raku | 42 | ||||
| -rwxr-xr-x | challenge-339/simon-proctor/raku/ch-2.raku | 21 |
2 files changed, 63 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; +} diff --git a/challenge-339/simon-proctor/raku/ch-2.raku b/challenge-339/simon-proctor/raku/ch-2.raku new file mode 100755 index 0000000000..adfeeea5ce --- /dev/null +++ b/challenge-339/simon-proctor/raku/ch-2.raku @@ -0,0 +1,21 @@ +#!/usr/bin/env raku + +subset IsTrue of Bool where so *; + +multi sub MAIN( IsTrue :t(:$test) ) is hidden-from-USAGE { + use Test; + is peak-gain(-5, 1, 5, -9, 2),1; + is peak-gain(10, 10, 10, -25),30; + is peak-gain(3, -4, 2, 5, -6, 1), 6; + is peak-gain(-1, -2, -3, -4), 0; + is peak-gain(-10, 15, 5),10; + done-testing; +} + +multi sub MAIN( *@gains where Int() ~~ all(*) ) { + peak-gain(|@gains).say; +} + +sub peak-gain( *@ints where Int() ~~ all(*) ) { + ([\+] (0, |@ints)).max; +} |
