diff options
| author | arnesom <arne@bbop.org> | 2023-04-16 22:04:01 +0200 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2023-04-16 22:04:01 +0200 |
| commit | ff02bcd5719980acd549089575019b3b6313c864 (patch) | |
| tree | f975557c8b6a782d2b71d76f762382d78f167dab | |
| parent | 460563374929fde06af50ad536397bdde377d181 (diff) | |
| download | perlweeklychallenge-club-ff02bcd5719980acd549089575019b3b6313c864.tar.gz perlweeklychallenge-club-ff02bcd5719980acd549089575019b3b6313c864.tar.bz2 perlweeklychallenge-club-ff02bcd5719980acd549089575019b3b6313c864.zip | |
Arne Sommer
| -rw-r--r-- | challenge-212/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-212/arne-sommer/raku/ch-1.raku | 17 | ||||
| -rwxr-xr-x | challenge-212/arne-sommer/raku/ch-2.raku | 50 | ||||
| -rwxr-xr-x | challenge-212/arne-sommer/raku/jumping-letters | 17 | ||||
| -rwxr-xr-x | challenge-212/arne-sommer/raku/rearrange-group | 50 |
5 files changed, 135 insertions, 0 deletions
diff --git a/challenge-212/arne-sommer/blog.txt b/challenge-212/arne-sommer/blog.txt new file mode 100644 index 0000000000..eb15a264ad --- /dev/null +++ b/challenge-212/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/letters-groups.html diff --git a/challenge-212/arne-sommer/raku/ch-1.raku b/challenge-212/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..b142639b06 --- /dev/null +++ b/challenge-212/arne-sommer/raku/ch-1.raku @@ -0,0 +1,17 @@ +#! /usr/bin/env raku + +unit sub MAIN ($word where $word ~~ /^<[a..zA..Z]>+$/, *@jump where @jump.all ~~ UInt && @jump.all < 26 && @jump.elems == $word.chars); + +for $word.comb -> $letter +{ + my $is-lc = $letter eq any('a' ... 'z'); + my $jump = @jump.shift; + my $new = chr($letter.ord + $jump); + + $new = chr($new.ord - 26) if $is-lc && $new.ord > 'z'.ord; + $new = chr($new.ord - 26) if !$is-lc && $new.ord > 'Z'.ord; + + print $new; +} + +say ""; diff --git a/challenge-212/arne-sommer/raku/ch-2.raku b/challenge-212/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..2a4d774f08 --- /dev/null +++ b/challenge-212/arne-sommer/raku/ch-2.raku @@ -0,0 +1,50 @@ +#! /usr/bin/env raku + +multi MAIN (UInt $size where $size >= 1, *@list where @list.elems >= 2 && @list.all ~~ Int && @list.elems %% $size, :v(:$verbose)) +{ + say ": size: $size" if $verbose; + + my @sorted = @list>>.Int.sort; + + say ": Sorted source: @sorted[]" if $verbose; + + my @res; + + for 1 .. @list.elems / $size -> $group + { + my @group = @sorted.shift; + + say ": New group $group starting with @group[0]" if $verbose; + + while @group.elems < $size + { + my $target = @group.tail + 1; + my $index = @sorted.first($target, :k); + + if defined $index + { + say ": Found target $target at index $index" if $verbose; + + @group.append: @sorted.splice($index,1); # as splice gives a list, and push would gladly add that. + + say ": Group now: @group[] (Rest: @sorted[])" if $verbose; + } + else + { + say ": Did not find target $target" if $verbose; + say '-1'; + exit; + } + } + + @res.push: @group; + say ": Added group to result: @group[]" if $verbose; + } + + say @res>>.join(",").map({ "($_)" }).join(", "); +} + +multi MAIN (*@slurp, :v(:$verbose)) +{ + say '-1'; +} diff --git a/challenge-212/arne-sommer/raku/jumping-letters b/challenge-212/arne-sommer/raku/jumping-letters new file mode 100755 index 0000000000..b142639b06 --- /dev/null +++ b/challenge-212/arne-sommer/raku/jumping-letters @@ -0,0 +1,17 @@ +#! /usr/bin/env raku + +unit sub MAIN ($word where $word ~~ /^<[a..zA..Z]>+$/, *@jump where @jump.all ~~ UInt && @jump.all < 26 && @jump.elems == $word.chars); + +for $word.comb -> $letter +{ + my $is-lc = $letter eq any('a' ... 'z'); + my $jump = @jump.shift; + my $new = chr($letter.ord + $jump); + + $new = chr($new.ord - 26) if $is-lc && $new.ord > 'z'.ord; + $new = chr($new.ord - 26) if !$is-lc && $new.ord > 'Z'.ord; + + print $new; +} + +say ""; diff --git a/challenge-212/arne-sommer/raku/rearrange-group b/challenge-212/arne-sommer/raku/rearrange-group new file mode 100755 index 0000000000..2a4d774f08 --- /dev/null +++ b/challenge-212/arne-sommer/raku/rearrange-group @@ -0,0 +1,50 @@ +#! /usr/bin/env raku + +multi MAIN (UInt $size where $size >= 1, *@list where @list.elems >= 2 && @list.all ~~ Int && @list.elems %% $size, :v(:$verbose)) +{ + say ": size: $size" if $verbose; + + my @sorted = @list>>.Int.sort; + + say ": Sorted source: @sorted[]" if $verbose; + + my @res; + + for 1 .. @list.elems / $size -> $group + { + my @group = @sorted.shift; + + say ": New group $group starting with @group[0]" if $verbose; + + while @group.elems < $size + { + my $target = @group.tail + 1; + my $index = @sorted.first($target, :k); + + if defined $index + { + say ": Found target $target at index $index" if $verbose; + + @group.append: @sorted.splice($index,1); # as splice gives a list, and push would gladly add that. + + say ": Group now: @group[] (Rest: @sorted[])" if $verbose; + } + else + { + say ": Did not find target $target" if $verbose; + say '-1'; + exit; + } + } + + @res.push: @group; + say ": Added group to result: @group[]" if $verbose; + } + + say @res>>.join(",").map({ "($_)" }).join(", "); +} + +multi MAIN (*@slurp, :v(:$verbose)) +{ + say '-1'; +} |
