diff options
| -rw-r--r-- | challenge-192/mark-anderson/raku/ch-1.raku | 12 | ||||
| -rw-r--r-- | challenge-192/mark-anderson/raku/ch-2.raku | 29 |
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 +} |
