aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-11-28 02:05:06 +0000
committerGitHub <noreply@github.com>2022-11-28 02:05:06 +0000
commit69bf180b3be057e8dcafcc0da8eefb92f1f53288 (patch)
tree13c0b5da59a8e47fdfbecbe63cc7bf8c683cae94
parenta0e2a3048b94a4b2eb9a4cdc5e536f283fea82f1 (diff)
parentee67e3894463948b8083e72800f48b7623694526 (diff)
downloadperlweeklychallenge-club-69bf180b3be057e8dcafcc0da8eefb92f1f53288.tar.gz
perlweeklychallenge-club-69bf180b3be057e8dcafcc0da8eefb92f1f53288.tar.bz2
perlweeklychallenge-club-69bf180b3be057e8dcafcc0da8eefb92f1f53288.zip
Merge pull request #7168 from wambash/challenge-week-192
solutions week 192
-rw-r--r--challenge-193/wambash/raku/ch-1.raku20
-rw-r--r--challenge-193/wambash/raku/ch-2.raku37
2 files changed, 57 insertions, 0 deletions
diff --git a/challenge-193/wambash/raku/ch-1.raku b/challenge-193/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..7655c58aa3
--- /dev/null
+++ b/challenge-193/wambash/raku/ch-1.raku
@@ -0,0 +1,20 @@
+#!/usr/bin/env raku
+
+sub binary-flip ($n) {
+ $n
+ andthen .base(2)
+ andthen .trans: <0 1> => <1 0>
+ andthen :2( $_ )
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is binary-flip(5),2;
+ is binary-flip(4),3;
+ is binary-flip(6),1;
+ done-testing;
+}
+
+multi MAIN ($n) {
+ say binary-flip $n
+}
diff --git a/challenge-193/wambash/raku/ch-2.raku b/challenge-193/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..eacc0091cf
--- /dev/null
+++ b/challenge-193/wambash/raku/ch-2.raku
@@ -0,0 +1,37 @@
+#!/usr/bin/env raku
+#
+my sub agg( $ ( :$average, :to-next($from-previous), :$moves, ), $n ) {
+ my $to-next = $from-previous + $n - $average;
+
+ \(
+ :$average,
+ :$to-next,
+ moves => $moves + $to-next.abs ,
+ )
+}
+
+sub equal-distribution (+@list) {
+ return Nil unless @list.sum %% @list.elems;
+
+ my $average = @list.sum div @list.elems;
+
+ @list
+ andthen \(:$average, :0moves, :0to-next,), .Slip
+ andthen .reduce: &agg
+ andthen .<moves>
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is equal-distribution(1,0,5), 4;
+ is equal-distribution(1,2,3), 2;
+ is equal-distribution(1,2,3), 2;
+ is equal-distribution(0,2,0), Nil;
+ is equal-distribution(0,3,0), 2;
+ is equal-distribution(1..5), 10;
+ done-testing;
+}
+
+multi MAIN (*@list) {
+ say equal-distribution(@list) // -1
+}