aboutsummaryrefslogtreecommitdiff
path: root/challenge-062
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-05-31 22:25:06 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-05-31 22:25:06 +0100
commit2ea63cdf5aa1fd7b2062998a71a75a56711ef5f3 (patch)
tree7cf2d62d1a69cdfff123cc5d4962398d83750ac2 /challenge-062
parenta326331586bcedc7ed825bcd46a2ba9d48e39f4a (diff)
downloadperlweeklychallenge-club-2ea63cdf5aa1fd7b2062998a71a75a56711ef5f3.tar.gz
perlweeklychallenge-club-2ea63cdf5aa1fd7b2062998a71a75a56711ef5f3.tar.bz2
perlweeklychallenge-club-2ea63cdf5aa1fd7b2062998a71a75a56711ef5f3.zip
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-062')
-rw-r--r--challenge-062/laurent-rosenfeld/addresses.txt7
-rw-r--r--challenge-062/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-062/laurent-rosenfeld/perl/ch-1.pl32
-rw-r--r--challenge-062/laurent-rosenfeld/raku/ch-1.p619
4 files changed, 59 insertions, 0 deletions
diff --git a/challenge-062/laurent-rosenfeld/addresses.txt b/challenge-062/laurent-rosenfeld/addresses.txt
new file mode 100644
index 0000000000..fe64dfd5a6
--- /dev/null
+++ b/challenge-062/laurent-rosenfeld/addresses.txt
@@ -0,0 +1,7 @@
+name@example.org
+rjt@cpan.org
+Name@example.org
+rjt@CPAN.org
+rjt@cpan.org
+user@alpha.example.org
+rjt@cpan.org
diff --git a/challenge-062/laurent-rosenfeld/blog.txt b/challenge-062/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..07972964ea
--- /dev/null
+++ b/challenge-062/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/laurent_r/2020/05/perl-weekly-challenge-62-sort-email-addresses.html
diff --git a/challenge-062/laurent-rosenfeld/perl/ch-1.pl b/challenge-062/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..6a4d76469a
--- /dev/null
+++ b/challenge-062/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,32 @@
+use strict;
+use warnings;
+use feature qw /say/;
+
+sub normalize {
+ my $addr = shift;
+ my ($box, $domain) = split /@/, $addr;
+ return (uc $domain . "@" . $box);
+}
+my ($unique, @files);
+my $first_param = shift;
+if ($first_param eq "-u") {
+ $unique = 1;
+ @files = @ARGV;
+} else {
+ $unique = 0;
+ @files = ($first_param, @ARGV);
+}
+my @addresses;
+for my $file(@files) {
+ open my $IN, "<", $file or die "Unable to open $file";
+ push @addresses, <$IN>;
+}
+chomp @addresses;
+my @sorted = map { $_->[0] }
+ sort { $a->[1] cmp $b->[1] }
+ map { [$_, normalize $_] } @addresses;
+if ($unique) {
+ my $last = "";
+ @sorted = grep { my $bool = $last ne normalize $_; $last = normalize $_; $bool} @sorted;
+}
+say for @sorted;
diff --git a/challenge-062/laurent-rosenfeld/raku/ch-1.p6 b/challenge-062/laurent-rosenfeld/raku/ch-1.p6
new file mode 100644
index 0000000000..e5b276c4d5
--- /dev/null
+++ b/challenge-062/laurent-rosenfeld/raku/ch-1.p6
@@ -0,0 +1,19 @@
+use v6;
+
+sub normalize (Str $addr) {
+ my ($box, $domain) = split /'@'/, $addr;
+ $domain.uc ~ '@' ~ $box;
+}
+sub process-addresses( @addresses, Bool $unique) {
+ @addresses = @addresses.unique(:as(&normalize)) if $unique;
+ my @sorted = sort &normalize, @addresses;
+ .say for @sorted;
+}
+multi sub MAIN (Bool :u(:$unique) = False, *@files) {
+ my @addresses = @files.IO.lines;
+ process-addresses @addresses, $unique;
+}
+multi sub MAIN (Bool :u(:$unique) = False) {
+ my @addresses = $*IN.lines;
+ process-addresses @addresses, $unique;
+}