diff options
| author | Jan Krňávek <Jan.Krnavek@gmail.com> | 2023-04-16 21:16:10 +0200 |
|---|---|---|
| committer | Jan Krňávek <Jan.Krnavek@gmail.com> | 2023-04-16 21:16:10 +0200 |
| commit | 2f51a08d594088ee8dd69d0f8dcd289ccf0975c6 (patch) | |
| tree | 416b4eec0a20959a7ad0307567c81913a1658963 | |
| parent | 460563374929fde06af50ad536397bdde377d181 (diff) | |
| download | perlweeklychallenge-club-2f51a08d594088ee8dd69d0f8dcd289ccf0975c6.tar.gz perlweeklychallenge-club-2f51a08d594088ee8dd69d0f8dcd289ccf0975c6.tar.bz2 perlweeklychallenge-club-2f51a08d594088ee8dd69d0f8dcd289ccf0975c6.zip | |
solutions week 212
| -rw-r--r-- | challenge-212/wambash/raku/ch-1.raku | 22 | ||||
| -rw-r--r-- | challenge-212/wambash/raku/ch-2.raku | 32 |
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 +} |
