aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-192/mark-anderson/raku/ch-1.raku12
-rw-r--r--challenge-192/mark-anderson/raku/ch-2.raku29
2 files changed, 41 insertions, 0 deletions
diff --git a/challenge-192/mark-anderson/raku/ch-1.raku b/challenge-192/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..866743e8e7
--- /dev/null
+++ b/challenge-192/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,12 @@
+#!/usr/bin/env raku
+use Test;
+
+is binary-flip(5), 2;
+is binary-flip(4), 3;
+is binary-flip(6), 1;
+
+sub binary-flip($n)
+{
+ #(1 x $n.base(2).chars).parse-base(2) +^ $n
+ $n.base(2).trans('01' => '10').parse-base(2)
+}
diff --git a/challenge-192/mark-anderson/raku/ch-2.raku b/challenge-192/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..d236b2cf94
--- /dev/null
+++ b/challenge-192/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,29 @@
+#!/usr/bin/env raku
+use Test;
+
+is equal-distribution(< 1 0 5 >), 4;
+is equal-distribution(< 0 2 0 >), -1;
+is equal-distribution(< 0 3 0 >), 2;
+is equal-distribution(< 1 0 2 5 7 >), 17;
+is equal-distribution(< 1 0 5 2 7 >), 14;
+is equal-distribution([1..101]), 85850;
+is equal-distribution([101...1]), 85850;
+
+# Thanks to scimon, drbaggy, and others for simplifying this for me :)
+
+sub equal-distribution(*@a)
+{
+ my $avg = @a.sum / @a.elems;
+ return -1 unless $avg.narrow ~~ Int;
+ my $moves;
+
+ for @a.rotor(2 => -1)
+ {
+ my $n = $avg - .[0];
+ .[0] += $n;
+ .[1] -= $n;
+ $moves += abs($n)
+ }
+
+ $moves
+}