diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-31 22:25:06 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-31 22:25:06 +0100 |
| commit | 2ea63cdf5aa1fd7b2062998a71a75a56711ef5f3 (patch) | |
| tree | 7cf2d62d1a69cdfff123cc5d4962398d83750ac2 /challenge-062 | |
| parent | a326331586bcedc7ed825bcd46a2ba9d48e39f4a (diff) | |
| download | perlweeklychallenge-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.txt | 7 | ||||
| -rw-r--r-- | challenge-062/laurent-rosenfeld/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-062/laurent-rosenfeld/perl/ch-1.pl | 32 | ||||
| -rw-r--r-- | challenge-062/laurent-rosenfeld/raku/ch-1.p6 | 19 |
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; +} |
