aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-212/wambash/raku/ch-1.raku22
-rw-r--r--challenge-212/wambash/raku/ch-2.raku32
2 files changed, 54 insertions, 0 deletions
diff --git a/challenge-212/wambash/raku/ch-1.raku b/challenge-212/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..aa7219592a
--- /dev/null
+++ b/challenge-212/wambash/raku/ch-1.raku
@@ -0,0 +1,22 @@
+#!/usr/bin/env raku
+enum Alphabet (<a> .. <z>);
+
+sub jumping-letters ($word,+@jump) {
+ $word
+ andthen .samemark('a').samecase('a')
+ andthen .subst: / (.) /, {
+ .( (::{$0} + @jump[$++]) mod 26 ) without Alphabet
+ }, :g
+ andthen .samemark($word).samecase($word)
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is jumping-letters('Perl',2,22,19,9),'Raku';
+ is jumping-letters('Raku',24,4,7,17),'Perl';
+ done-testing;
+}
+
+multi MAIN ($word,*@jump) {
+ say jumping-letters $word,@jump
+}
diff --git a/challenge-212/wambash/raku/ch-2.raku b/challenge-212/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..ebec658384
--- /dev/null
+++ b/challenge-212/wambash/raku/ch-2.raku
@@ -0,0 +1,32 @@
+#!/usr/bin/env raku
+proto rearrange-group-iter ((Bag :$bag, :@acc, :$size )) {*}
+
+multi rearrange-group-iter ((:$bag,:@acc,:$size where { $bag.total !%% $size } ) ) {
+ \( acc => Nil, bag => bag() )
+}
+
+multi rearrange-group-iter (( Bag:D :$bag,:@acc,:$size)) {
+ $bag.min.key .. *
+ andthen .head: $size
+ andthen .cache
+ andthen \( bag => ( $bag ∖ $_ ), acc => (|@acc, $_), :$size )
+}
+
+sub rearrange-group (+@list, :$size) {
+ @list.Bag
+ andthen \( bag => $_, acc => (), :$size ), &rearrange-group-iter ... *.<bag>.total == 0
+ andthen .tail.<acc>
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is-deeply rearrange-group((1,2,3,5,1,2,7,6,3),:3size), ((1,2,3), (1,2,3), (5,6,7));
+ is-deeply rearrange-group((1,2,3),:2size), Nil;
+ is-deeply rearrange-group(1,2,4,3,5,3,:3size), ((1,2,3),(3,4,5));
+ is-deeply rearrange-group(1,5,2,6,4,7,:3size), Nil;
+ done-testing;
+}
+
+multi MAIN (*@list,:$size!) {
+ say rearrange-group @list».Int,:$size
+}