aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-323/mark-anderson/raku/ch-1.raku12
-rw-r--r--challenge-323/mark-anderson/raku/ch-2.raku18
2 files changed, 30 insertions, 0 deletions
diff --git a/challenge-323/mark-anderson/raku/ch-1.raku b/challenge-323/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..c712cd2f95
--- /dev/null
+++ b/challenge-323/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,12 @@
+#!/usr/bin/env raku
+use Test;
+
+is increment-decrement(<--x x++ x++>), 1;
+is increment-decrement(<x++ ++x x++>), 3;
+is increment-decrement(<x++ ++x --x x-->), 0;
+
+sub increment-decrement(@operations)
+{
+ my %m is Map = @operations.classify({ .contains('+') });
+ quietly %m<True> - %m<False>
+}
diff --git a/challenge-323/mark-anderson/raku/ch-2.raku b/challenge-323/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..1935ad2b5e
--- /dev/null
+++ b/challenge-323/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,18 @@
+#!/usr/bin/env raku
+use Test;
+
+is tax-amount(10, ([3,50], [7,10], [12,25])), 2.65;
+is tax-amount(2, ([1,0], [4,25], [5,50])), 0.25;
+is tax-amount(0, ([2,50])), 0;
+
+sub tax-amount($income, @tax)
+{
+ my @brackets = @tax.flat[0,2...*];
+ my @taxes = @tax.flat[1,3...*];
+ my $end = @brackets.first(* >= $income, :k);
+
+ @brackets[$end] = $income;
+ @brackets = flat 0, @brackets[0..$end];
+
+ ([+] @brackets.rotor(2 => -1).flat.map({ $^b - $^a }) Z* @taxes) / 100
+}