diff options
| author | Luis Mochan <mochan@fis.unam.mx> | 2023-04-10 18:01:34 -0600 |
|---|---|---|
| committer | Luis Mochan <mochan@fis.unam.mx> | 2023-04-10 18:01:34 -0600 |
| commit | 14233f6ad9eb07af32f656e6ec17c96ae695c583 (patch) | |
| tree | b0b6c9acab045b13842aedd3da28717f5f0646d3 | |
| parent | e5e6913d2faf5607a52ceb96efaa35c7b6ce57d3 (diff) | |
| download | perlweeklychallenge-club-14233f6ad9eb07af32f656e6ec17c96ae695c583.tar.gz perlweeklychallenge-club-14233f6ad9eb07af32f656e6ec17c96ae695c583.tar.bz2 perlweeklychallenge-club-14233f6ad9eb07af32f656e6ec17c96ae695c583.zip | |
Solve PWC212
| -rw-r--r-- | challenge-212/wlmb/blog.txt | 2 | ||||
| -rwxr-xr-x | challenge-212/wlmb/perl/ch-1.pl | 28 | ||||
| -rwxr-xr-x | challenge-212/wlmb/perl/ch-2.pl | 38 |
3 files changed, 68 insertions, 0 deletions
diff --git a/challenge-212/wlmb/blog.txt b/challenge-212/wlmb/blog.txt new file mode 100644 index 0000000000..3fd09837d5 --- /dev/null +++ b/challenge-212/wlmb/blog.txt @@ -0,0 +1,2 @@ +https://wlmb.github.io/2023/04/10/PWC212/ + diff --git a/challenge-212/wlmb/perl/ch-1.pl b/challenge-212/wlmb/perl/ch-1.pl new file mode 100755 index 0000000000..9276290d8b --- /dev/null +++ b/challenge-212/wlmb/perl/ch-1.pl @@ -0,0 +1,28 @@ +#!/usr/bin/env perl +# Perl weekly challenge 212 +# Task 1: Jumping Letters +# +# See https://wlmb.github.io/2023/04/10/PWC212/#task-1-jumping-letters +use v5.36; + +die <<~"FIN" unless @ARGV; + Usage: $0 word J1 [J2...] + Replace word after jumping its first J1 positions, its second letter + J2 positions and so on. + FIN + +my @letters="a".."z"; +my %index_of; +my $counter=0; +$index_of{$_}=$counter++ for @letters; + +my @input=split "", my $input=shift; +my @jumps=@ARGV; +die "Expected as many jumps as letters" unless @input==@jumps; +my @output= + map { + my $output=$letters[($index_of{lc $input[$_]}+$jumps[$_])%@letters]; + $input[$_]=~/[A-Z]/?uc $output:$output + } 0..@input-1; +my $output = join "", @output; +say "$input -> $output"; diff --git a/challenge-212/wlmb/perl/ch-2.pl b/challenge-212/wlmb/perl/ch-2.pl new file mode 100755 index 0000000000..6499c666f5 --- /dev/null +++ b/challenge-212/wlmb/perl/ch-2.pl @@ -0,0 +1,38 @@ +#!/usr/bin/env perl +# Perl weekly challenge 212 +# Task 2: Rearrange Groups +# +# See https://wlmb.github.io/2023/04/10/PWC212/#task-2-rearrange-groups +use v5.36; + +die <<~"FIN" unless @ARGV; + Usage: $0 S N1 [N2...] + to split the set N1 N2... into consecutive groups of size S + FIN + +my $size=shift; +my @ordered=sort {$a <=> $b} @ARGV; +my @groups; +my $success=1; +while(@ordered){ + my $group=next_group(); + $success=0, last unless defined $group; + push @groups, $group; +} +say "Input: @ARGV, size: $size"; +say "Output: -1" unless $success; +say "Output: (", join(")(", map {join ", ", @$_} @groups), ")" if $success; + +sub next_group(){ + my @group; + my @repeated; + while(@ordered && @group < $size){ + my $x=shift @ordered; + push(@repeated, $x), next if @group and $group[-1]==$x; + return if @group and $group[-1]+1 != $x; + push @group, $x; + } + @ordered=(@repeated, @ordered); + return [@group] if @group==$size; + return; +} |
