diff options
| author | Luis Mochan <mochan@fis.unam.mx> | 2023-03-20 14:08:40 -0600 |
|---|---|---|
| committer | Luis Mochan <mochan@fis.unam.mx> | 2023-03-20 14:08:40 -0600 |
| commit | dd4a57665bdebce636af0c254d624d8f36805802 (patch) | |
| tree | 93da77a3f1587250b0f173cb8e8bd7c8ecd07306 | |
| parent | 9c5cd2108a8f6cf8b793c28051fdf8d767a4c8a9 (diff) | |
| download | perlweeklychallenge-club-dd4a57665bdebce636af0c254d624d8f36805802.tar.gz perlweeklychallenge-club-dd4a57665bdebce636af0c254d624d8f36805802.tar.bz2 perlweeklychallenge-club-dd4a57665bdebce636af0c254d624d8f36805802.zip | |
Solve PWC209
| -rw-r--r-- | challenge-209/wlmb/blog.txt | 2 | ||||
| -rwxr-xr-x | challenge-209/wlmb/perl/ch-1.pl | 26 | ||||
| -rwxr-xr-x | challenge-209/wlmb/perl/ch-2.pl | 31 |
3 files changed, 59 insertions, 0 deletions
diff --git a/challenge-209/wlmb/blog.txt b/challenge-209/wlmb/blog.txt new file mode 100644 index 0000000000..a1bfa8bd88 --- /dev/null +++ b/challenge-209/wlmb/blog.txt @@ -0,0 +1,2 @@ +https://wlmb.github.io/2023/03/20/PWC209/ + diff --git a/challenge-209/wlmb/perl/ch-1.pl b/challenge-209/wlmb/perl/ch-1.pl new file mode 100755 index 0000000000..a2ce3b90a4 --- /dev/null +++ b/challenge-209/wlmb/perl/ch-1.pl @@ -0,0 +1,26 @@ +#!/usr/bin/env perl +# Perl weekly challenge 209 +# Task 1: Special Bit Characters +# +# See https://wlmb.github.io/2023/03/20/PWC209/#task-1-special-bit-characters +use v5.36; +my %patterns; +die <<~"FIN" unless @ARGV; + Usage: $0 S1 [S2...] + to decode the binary sequences S1 S2 + using the code 0->a, 10->b 11->c + FIN + +@patterns{qw(0 10 11)}=qw(a b c); +for(@ARGV){ + my $last; + die "Not a binary pattern: $_\n" unless /^(0|1)+/; #Check input + say " $_ -> ", + ( + map {$last=$patterns{$_}} + grep {length $_} + split /(1.|0)/ + ), + " -> ", + $last eq "a"?1:0; +} diff --git a/challenge-209/wlmb/perl/ch-2.pl b/challenge-209/wlmb/perl/ch-2.pl new file mode 100755 index 0000000000..50a270aecd --- /dev/null +++ b/challenge-209/wlmb/perl/ch-2.pl @@ -0,0 +1,31 @@ +#!/usr/bin/env perl +# Perl weekly challenge 209 +# Task 2: Merge Account +# +# See https://wlmb.github.io/2023/03/20/PWC209/#task-2-merge-account +use v5.36; +use English; +my %merge_to; +my %line_of; +my @names; +while(<>){ + chomp; + my ($name, @addresses)=split / /; + $names[$INPUT_LINE_NUMBER] = $name; + for(@addresses){ + $merge_to{$INPUT_LINE_NUMBER} = + defined $merge_to{$line_of{$_}} + ?$merge_to{$line_of{$_}} # previously merged + :$line_of{$_} # or first time merge + if defined $line_of{$_}; # address has been seen before + $line_of{$_}//=$INPUT_LINE_NUMBER; # map to current line if not seen before + } + $merge_to{$.}//=$INPUT_LINE_NUMBER; # merge to itself if not already merged +} +my @addresses = keys %line_of; # distinct addresses +my %merged; # merged accounts +push @{$merged{$merge_to{$line_of{$_}}}}, $_ # add addresses to merged accounts + for @addresses; +# output account name, (one of its) line number(s), addresses +say join " ", $names[$_], "($_):", sort {$a cmp $b} @{$merged{$_}} + for sort {$names[$a] cmp $names[$b] || $a <=> $b} keys %merged; |
