diff options
| author | Flavio Poletti <flavio@polettix.it> | 2021-04-27 08:24:07 +0200 |
|---|---|---|
| committer | Flavio Poletti <flavio@polettix.it> | 2021-04-27 08:24:07 +0200 |
| commit | 4a6745efdaeb0a4451c847e103081c3654c4752b (patch) | |
| tree | 468db8653f60dab45d279c6d2d6d755985060958 | |
| parent | 32b7f3041862a27fd0a89328b57879750269b560 (diff) | |
| download | perlweeklychallenge-club-4a6745efdaeb0a4451c847e103081c3654c4752b.tar.gz perlweeklychallenge-club-4a6745efdaeb0a4451c847e103081c3654c4752b.tar.bz2 perlweeklychallenge-club-4a6745efdaeb0a4451c847e103081c3654c4752b.zip | |
Add polettix's solution to challenge-110
| -rw-r--r-- | challenge-110/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-110/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-110/polettix/perl/ch-1.pl | 42 | ||||
| -rw-r--r-- | challenge-110/polettix/perl/ch-2.pl | 33 |
4 files changed, 77 insertions, 0 deletions
diff --git a/challenge-110/polettix/blog.txt b/challenge-110/polettix/blog.txt new file mode 100644 index 0000000000..4af1620081 --- /dev/null +++ b/challenge-110/polettix/blog.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2021/04/28/pwc110-valid-phone-numbers/ diff --git a/challenge-110/polettix/blog1.txt b/challenge-110/polettix/blog1.txt new file mode 100644 index 0000000000..087d74fa0f --- /dev/null +++ b/challenge-110/polettix/blog1.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2021/04/29/pwc110-transpose-file/ diff --git a/challenge-110/polettix/perl/ch-1.pl b/challenge-110/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..56e9843c48 --- /dev/null +++ b/challenge-110/polettix/perl/ch-1.pl @@ -0,0 +1,42 @@ +#!/usr/bin/env perl +use 5.024; +use warnings; +use experimental qw< postderef signatures >; +no warnings qw< experimental::postderef experimental::signatures >; + +sub is_phone_number_acceptable ($n) { + scalar( + $n =~ m{ + \A + (?: + \+\d\d # +nn + | \(\d\d\) # (nn) + | \d{4} # nnnn + ) + \s+ + \d{10} # nnnnnnnnnn + \z + }mxs + ); +} + +sub valid_phone_numbers ($f) { + $f = ref($f) ? $f + : ($f eq '-') ? \*STDIN + : do { open my $h, '<', $f or die "$!\n"; $h }; + is_phone_number_acceptable(s{\A\s+|\s+\z}{}rgmxs) && print while <$f>; +} + +my $f = shift // do { + my $input = <<'END'; +0044 1148820341 + +44 1148820341 + 44-11-4882-0341 +(44) 1148820341 + 00 1148820341 +END + open my $fh, '<', \$input; + $fh; +}; + +valid_phone_numbers($f); diff --git a/challenge-110/polettix/perl/ch-2.pl b/challenge-110/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..081dd7cada --- /dev/null +++ b/challenge-110/polettix/perl/ch-2.pl @@ -0,0 +1,33 @@ +#!/usr/bin/env perl +use 5.024; +use warnings; +use experimental qw< postderef signatures >; +no warnings qw< experimental::postderef experimental::signatures >; + +sub transpose_file ($f) { + $f = ref($f) ? $f + : ($f eq '-') ? \*STDIN + : do { open my $h, '<', $f or die "$!\n"; $h }; + my @lines = map { chomp; [ split m{,}mxs ] } <$f>; + while ('necessary') { + my $g = 0; + my @t = map { $g = 1 if $_->@*; shift($_->@*) || '' } @lines; + last unless $g; + say join ',', @t; + } + return; +} + +my $f = shift // do { + my $input = <<'END'; +name,age,sex +Mohammad,45,m +Joe,20,m +Julie,35,f +Cristina,10,f +END + open my $fh, '<', \$input; + $fh; +}; + +transpose_file($f); |
