aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-306/mark-anderson/raku/ch-1.raku10
-rw-r--r--challenge-306/mark-anderson/raku/ch-2.raku27
2 files changed, 37 insertions, 0 deletions
diff --git a/challenge-306/mark-anderson/raku/ch-1.raku b/challenge-306/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..4958c9d823
--- /dev/null
+++ b/challenge-306/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,10 @@
+#!/usr/bin/env raku
+use Test;
+
+is odd-sum(2,5,3,6,4), 77;
+is odd-sum(1,3), 4;
+
+sub odd-sum(+@ints)
+{
+ sum flat (1,3...@ints.elems).map(-> $n { @ints.rotor($n => -$n+1) })
+}
diff --git a/challenge-306/mark-anderson/raku/ch-2.raku b/challenge-306/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..ee0213744e
--- /dev/null
+++ b/challenge-306/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,27 @@
+#!/usr/bin/env raku
+use Test;
+
+is last-element(3,8,5,2,9,2), 1;
+is last-element(3,2,5), 0;
+
+sub last-element(+@ints)
+{
+ my $bag = @ints.BagHash;
+
+ while $bag.elems > 1
+ {
+ my $a = $bag.max.key;
+ my $even = $bag{$a} %% 2;
+
+ $bag{$a} = 0;
+
+ unless $even
+ {
+ my $b = $bag.max.key;
+ $bag{$b}--;
+ $bag{$a-$b}++
+ }
+ }
+
+ $bag.values.head %% 2 ?? 0 !! $bag.keys.head
+}