From ee67e3894463948b8083e72800f48b7623694526 Mon Sep 17 00:00:00 2001 From: Jan Krňávek Date: Sun, 27 Nov 2022 21:39:09 +0100 Subject: solutions week 192 --- challenge-193/wambash/raku/ch-1.raku | 20 +++++++++++++++++++ challenge-193/wambash/raku/ch-2.raku | 37 ++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 challenge-193/wambash/raku/ch-1.raku create mode 100644 challenge-193/wambash/raku/ch-2.raku 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 . +} + +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 +} -- cgit