aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-05-03 02:43:14 +0100
committerGitHub <noreply@github.com>2021-05-03 02:43:14 +0100
commit83f370555cb790f3a8e953274d5c92a8ce0b7968 (patch)
treedf4760e28e9c1ecca21198855284654bec9c2bfd
parentc24feebe228b5204184228ae01239db90b6f81af (diff)
parentbf86d706666f7be43b00aea4269a421ee78205f5 (diff)
downloadperlweeklychallenge-club-83f370555cb790f3a8e953274d5c92a8ce0b7968.tar.gz
perlweeklychallenge-club-83f370555cb790f3a8e953274d5c92a8ce0b7968.tar.bz2
perlweeklychallenge-club-83f370555cb790f3a8e953274d5c92a8ce0b7968.zip
Merge pull request #3995 from arnesom/branch-for-challenge-110
Arne Sommer
-rw-r--r--challenge-110/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-110/arne-sommer/perl/ch-1.pl21
-rwxr-xr-xchallenge-110/arne-sommer/perl/ch-2.pl24
-rwxr-xr-xchallenge-110/arne-sommer/perl/transpose-file-perl24
-rwxr-xr-xchallenge-110/arne-sommer/perl/valid-phone-numbers-perl21
-rw-r--r--challenge-110/arne-sommer/persons.csv5
-rw-r--r--challenge-110/arne-sommer/phone-numbers.txt5
-rwxr-xr-xchallenge-110/arne-sommer/raku/ch-1.raku16
-rwxr-xr-xchallenge-110/arne-sommer/raku/ch-2.raku20
-rwxr-xr-xchallenge-110/arne-sommer/raku/transpose-file20
-rwxr-xr-xchallenge-110/arne-sommer/raku/valid-phone-numbers16
11 files changed, 173 insertions, 0 deletions
diff --git a/challenge-110/arne-sommer/blog.txt b/challenge-110/arne-sommer/blog.txt
new file mode 100644
index 0000000000..9c665d4a8e
--- /dev/null
+++ b/challenge-110/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/validly-transposed.html
diff --git a/challenge-110/arne-sommer/perl/ch-1.pl b/challenge-110/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..9fb8f44494
--- /dev/null
+++ b/challenge-110/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use File::Slurp;
+
+my $phonebook = $ARGV[0] // 'phone-numbers.txt';
+
+for my $line (read_file($phonebook, chomp => 1))
+{
+ next unless length($line) == 15;
+ next unless substr($line, 4, 1) eq ' ';
+ next unless substr($line, 5) =~ /^\d{10}$/;
+
+ my $first = substr($line, 0, 4);
+
+ next unless $first =~ /^\d{4}$/ || $first =~ /^\s\+\d\d$/ || $first =~ /^\(\d\d\)$/;
+
+ say $line;
+}
diff --git a/challenge-110/arne-sommer/perl/ch-2.pl b/challenge-110/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..ef866a85d3
--- /dev/null
+++ b/challenge-110/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,24 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use File::Slurp;
+
+my $csv_file = $ARGV[0] // 'persons.csv';
+
+my @lines;
+
+for my $line (read_file($csv_file, chomp => 1))
+{
+ my @words = split(',', $line);
+
+ for my $index (0 .. @words -1)
+ {
+ $lines[$index] .= $lines[$index]
+ ? ( "," . $words[$index])
+ : $words[$index];
+ }
+}
+
+say $_ for @lines;
diff --git a/challenge-110/arne-sommer/perl/transpose-file-perl b/challenge-110/arne-sommer/perl/transpose-file-perl
new file mode 100755
index 0000000000..ef866a85d3
--- /dev/null
+++ b/challenge-110/arne-sommer/perl/transpose-file-perl
@@ -0,0 +1,24 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use File::Slurp;
+
+my $csv_file = $ARGV[0] // 'persons.csv';
+
+my @lines;
+
+for my $line (read_file($csv_file, chomp => 1))
+{
+ my @words = split(',', $line);
+
+ for my $index (0 .. @words -1)
+ {
+ $lines[$index] .= $lines[$index]
+ ? ( "," . $words[$index])
+ : $words[$index];
+ }
+}
+
+say $_ for @lines;
diff --git a/challenge-110/arne-sommer/perl/valid-phone-numbers-perl b/challenge-110/arne-sommer/perl/valid-phone-numbers-perl
new file mode 100755
index 0000000000..9fb8f44494
--- /dev/null
+++ b/challenge-110/arne-sommer/perl/valid-phone-numbers-perl
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use File::Slurp;
+
+my $phonebook = $ARGV[0] // 'phone-numbers.txt';
+
+for my $line (read_file($phonebook, chomp => 1))
+{
+ next unless length($line) == 15;
+ next unless substr($line, 4, 1) eq ' ';
+ next unless substr($line, 5) =~ /^\d{10}$/;
+
+ my $first = substr($line, 0, 4);
+
+ next unless $first =~ /^\d{4}$/ || $first =~ /^\s\+\d\d$/ || $first =~ /^\(\d\d\)$/;
+
+ say $line;
+}
diff --git a/challenge-110/arne-sommer/persons.csv b/challenge-110/arne-sommer/persons.csv
new file mode 100644
index 0000000000..716ebdce75
--- /dev/null
+++ b/challenge-110/arne-sommer/persons.csv
@@ -0,0 +1,5 @@
+name,age,sex
+Mohammad,45,m
+Joe,20,m
+Julie,35,f
+Cristina,10,f
diff --git a/challenge-110/arne-sommer/phone-numbers.txt b/challenge-110/arne-sommer/phone-numbers.txt
new file mode 100644
index 0000000000..48d6254741
--- /dev/null
+++ b/challenge-110/arne-sommer/phone-numbers.txt
@@ -0,0 +1,5 @@
+0044 1148820341
+ +44 1148820341
+ 44-11-4882-0341
+(44) 1148820341
+ 00 1148820341
diff --git a/challenge-110/arne-sommer/raku/ch-1.raku b/challenge-110/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..f18247b4bc
--- /dev/null
+++ b/challenge-110/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,16 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($phonebook where $phonebook.IO.f && $phonebook.IO.r = 'phone-numbers.txt');
+
+for $phonebook.IO.lines -> $line
+{
+ next unless $line.chars == 15;
+ next unless $line.substr(4,1) eq ' ';
+ next unless $line.substr(5) ~~ /^\d ** 10$/;
+
+ my $first = $line.substr(0,4);
+
+ next unless $first ~~ /^\d ** 4$/ || $first ~~ /^\s\+\d\d$/ || $first ~~ /^\(\d\d\)$/;
+
+ say $line;
+} \ No newline at end of file
diff --git a/challenge-110/arne-sommer/raku/ch-2.raku b/challenge-110/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..7539256db0
--- /dev/null
+++ b/challenge-110/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($csv-file where $csv-file.IO.f && $csv-file.IO.r = 'persons.csv');
+
+my @lines;
+
+for $csv-file.IO.lines -> $line
+{
+ my @words = $line.split(',');
+
+ for 0 .. @words.end -> $index
+ {
+ @lines[$index].push: @words[$index];
+ }
+}
+
+for @lines -> $line
+{
+ say $line.join(',');
+}
diff --git a/challenge-110/arne-sommer/raku/transpose-file b/challenge-110/arne-sommer/raku/transpose-file
new file mode 100755
index 0000000000..7539256db0
--- /dev/null
+++ b/challenge-110/arne-sommer/raku/transpose-file
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($csv-file where $csv-file.IO.f && $csv-file.IO.r = 'persons.csv');
+
+my @lines;
+
+for $csv-file.IO.lines -> $line
+{
+ my @words = $line.split(',');
+
+ for 0 .. @words.end -> $index
+ {
+ @lines[$index].push: @words[$index];
+ }
+}
+
+for @lines -> $line
+{
+ say $line.join(',');
+}
diff --git a/challenge-110/arne-sommer/raku/valid-phone-numbers b/challenge-110/arne-sommer/raku/valid-phone-numbers
new file mode 100755
index 0000000000..f18247b4bc
--- /dev/null
+++ b/challenge-110/arne-sommer/raku/valid-phone-numbers
@@ -0,0 +1,16 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($phonebook where $phonebook.IO.f && $phonebook.IO.r = 'phone-numbers.txt');
+
+for $phonebook.IO.lines -> $line
+{
+ next unless $line.chars == 15;
+ next unless $line.substr(4,1) eq ' ';
+ next unless $line.substr(5) ~~ /^\d ** 10$/;
+
+ my $first = $line.substr(0,4);
+
+ next unless $first ~~ /^\d ** 4$/ || $first ~~ /^\s\+\d\d$/ || $first ~~ /^\(\d\d\)$/;
+
+ say $line;
+} \ No newline at end of file