aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Mochan <mochan@fis.unam.mx>2023-04-10 18:01:34 -0600
committerLuis Mochan <mochan@fis.unam.mx>2023-04-10 18:01:34 -0600
commit14233f6ad9eb07af32f656e6ec17c96ae695c583 (patch)
treeb0b6c9acab045b13842aedd3da28717f5f0646d3
parente5e6913d2faf5607a52ceb96efaa35c7b6ce57d3 (diff)
downloadperlweeklychallenge-club-14233f6ad9eb07af32f656e6ec17c96ae695c583.tar.gz
perlweeklychallenge-club-14233f6ad9eb07af32f656e6ec17c96ae695c583.tar.bz2
perlweeklychallenge-club-14233f6ad9eb07af32f656e6ec17c96ae695c583.zip
Solve PWC212
-rw-r--r--challenge-212/wlmb/blog.txt2
-rwxr-xr-xchallenge-212/wlmb/perl/ch-1.pl28
-rwxr-xr-xchallenge-212/wlmb/perl/ch-2.pl38
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;
+}