aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-06-01 00:22:09 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-06-01 00:22:09 +0100
commitf75b9c1a10d1cbc75c682fd115579fcf41214517 (patch)
treee1940f3a204690f833102536c4cedb2ea6a20f48
parent4a1c1fa0703dae134d52dc4848d06206fffdd5c2 (diff)
downloadperlweeklychallenge-club-f75b9c1a10d1cbc75c682fd115579fcf41214517.tar.gz
perlweeklychallenge-club-f75b9c1a10d1cbc75c682fd115579fcf41214517.tar.bz2
perlweeklychallenge-club-f75b9c1a10d1cbc75c682fd115579fcf41214517.zip
- Added solutions by Arne Sommer.
-rw-r--r--challenge-062/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-062/arne-sommer/raku/ch-1.p634
-rwxr-xr-xchallenge-062/arne-sommer/raku/ch-2.p6125
-rwxr-xr-xchallenge-062/arne-sommer/raku/input-list.txt5
-rwxr-xr-xchallenge-062/arne-sommer/raku/lib/QueenCube.rakumod195
-rwxr-xr-xchallenge-062/arne-sommer/raku/queen-cube125
-rwxr-xr-xchallenge-062/arne-sommer/raku/queen-cube-125
-rwxr-xr-xchallenge-062/arne-sommer/raku/queen-cube-232
-rwxr-xr-xchallenge-062/arne-sommer/raku/queen-cube-335
-rwxr-xr-xchallenge-062/arne-sommer/raku/queen-cube-449
-rwxr-xr-xchallenge-062/arne-sommer/raku/queen-cube-575
-rwxr-xr-xchallenge-062/arne-sommer/raku/sea34
-rwxr-xr-xchallenge-062/arne-sommer/raku/sea-main34
-rwxr-xr-xchallenge-062/arne-sommer/raku/sea-simple13
-rw-r--r--stats/pwc-current.json333
-rw-r--r--stats/pwc-language-breakdown-summary.json64
-rw-r--r--stats/pwc-language-breakdown.json928
-rw-r--r--stats/pwc-leaders.json406
-rw-r--r--stats/pwc-summary-1-30.json40
-rw-r--r--stats/pwc-summary-121-150.json42
-rw-r--r--stats/pwc-summary-151-180.json24
-rw-r--r--stats/pwc-summary-31-60.json32
-rw-r--r--stats/pwc-summary-61-90.json48
-rw-r--r--stats/pwc-summary-91-120.json126
-rw-r--r--stats/pwc-summary.json56
25 files changed, 1841 insertions, 1040 deletions
diff --git a/challenge-062/arne-sommer/blog.txt b/challenge-062/arne-sommer/blog.txt
new file mode 100644
index 0000000000..d8005d4a41
--- /dev/null
+++ b/challenge-062/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/email-queen.html
diff --git a/challenge-062/arne-sommer/raku/ch-1.p6 b/challenge-062/arne-sommer/raku/ch-1.p6
new file mode 100755
index 0000000000..294e52c2e8
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/ch-1.p6
@@ -0,0 +1,34 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@files, :$verbose, :$u);
+
+say ": Files: @files[]" if $verbose;
+
+my @input = @files.elems
+ ?? IO::CatHandle.new(@files).lines
+ !! lines;
+
+say ": Content: @input[]" if $verbose;
+
+my %sort;
+my %seen;
+my @output;
+
+for @input -> $current
+{
+ my ($mailbox, $domain) = $current.split('@');
+
+ say ": Candidate: $mailbox @ { $domain.lc }" if $verbose;
+
+ if $u
+ {
+ my $candidate = $mailbox ~ '@' ~ $domain.lc;
+ next if %seen{$candidate};
+ %seen{$candidate} = True;
+ }
+
+ %sort{$current} = "{ $domain.lc } $mailbox";
+ @output.push: $current;
+}
+
+.say for @output.sort({ %sort{$^a} cmp %sort{$^b} });
diff --git a/challenge-062/arne-sommer/raku/ch-2.p6 b/challenge-062/arne-sommer/raku/ch-2.p6
new file mode 100755
index 0000000000..6b23f03141
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/ch-2.p6
@@ -0,0 +1,125 @@
+#! /usr/bin/env raku
+
+use lib "lib";
+use QueenCube;
+
+unit sub MAIN
+(
+ $size = 8,
+ :$id = 'Q',
+ :$empty =".",
+ :$queen,
+ :$colour,
+ :$newlines,
+ :$fill,
+ :$random,
+ :$silent,
+ :$get-the-best,
+ :$verbose
+);
+
+if $get-the-best
+{
+ get-the-best;
+}
+elsif $silent ~~ Int
+{
+ get-many-solutions;
+}
+else
+{
+ get-one-solution;
+}
+
+sub get-one-solution
+{
+ my $c = QueenCube.new(size => $size);
+
+ $c.init($empty);
+
+ if $queen
+ {
+ $c.queen($id, $_) for $queen.words;
+ }
+
+ if $fill || $random
+ {
+ loop
+ {
+ my $pos = $random ?? $c.get-empty-cell-random !! $c.get-empty-cell;
+ last unless defined $pos;
+ say ": Queen at $pos" if $verbose;
+ my ($x, $y, $z) = $pos.split(";");
+ $c.queen($id, $x, $y, $z);
+ }
+ }
+
+ unless $silent
+ {
+ $newlines
+ ?? $c.display-with-newlines($colour, $newlines)
+ !! $c.display($colour);
+ }
+
+ my $count = $c.number-of-queens;
+ say "Number of Queens: ", $count if $count > 1;
+
+ return $count;
+}
+
+
+sub get-many-solutions
+{
+ my @result;
+
+ @result.push(get-one-solution) for ^$silent;
+
+ my %result;
+
+ %result{$_}++ for @result;
+
+ say "$_ (%result{$_})" for %result.keys.sort;
+}
+
+
+sub get-the-best
+{
+ my Int $best-count = 0;
+ my $best-cube;
+
+ my $c = QueenCube.new(size => $size);
+ $c.init($empty);
+
+ iterate($c);
+
+ sub iterate ($cube)
+ {
+ for $cube.get-all-cells -> $cell
+ {
+ next unless $c.cell-is-free($cell);
+
+ my $copy = $cube.clone;
+ $copy.queen($id, $cell);
+
+ iterate($copy);
+ }
+
+ my $q = $cube.number-of-queens;
+ if $q > $best-count
+ {
+ say ": New best cube with $q Queens (old had $best-count)" if $verbose;
+ $best-count = $q;
+ $best-cube = $cube
+ }
+ elsif $verbose
+ {
+ say ": Considering cube with $q Queens";
+ }
+ }
+
+ $newlines
+ ?? $c.display-with-newlines($colour, $newlines)
+ !! $c.display($colour);
+
+ say "Number of Queens: ", $best-count;
+}
diff --git a/challenge-062/arne-sommer/raku/input-list.txt b/challenge-062/arne-sommer/raku/input-list.txt
new file mode 100755
index 0000000000..5dc3f2ceb0
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/input-list.txt
@@ -0,0 +1,5 @@
+name@example.org
+rjt@cpan.org
+Name@example.org
+rjt@CPAN.org
+user@alpha.example.org
diff --git a/challenge-062/arne-sommer/raku/lib/QueenCube.rakumod b/challenge-062/arne-sommer/raku/lib/QueenCube.rakumod
new file mode 100755
index 0000000000..94a63e5188
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/lib/QueenCube.rakumod
@@ -0,0 +1,195 @@
+use v6;
+
+constant ansi-blue = "\e[44m";
+constant ansi-green = "\e[42m";
+constant ansi-red = "\e[101m";
+constant ansi-stop = "\e[0m ";
+
+constant html-blue = '<span class="text-light bg-primary">';
+constant html-green = '<span class="text-light bg-success">';
+constant html-red = '<span class="text-light bg-danger">';
+constant html-stop = '</span> ';
+
+
+unit class QueenCube;
+
+
+has Int $.size;
+has @.elems is rw;
+has $.blank is rw;
+
+
+method init ($init)
+{
+ self.blank = $init;
+
+ for 1 .. $!size -> $x
+ {
+ for 1 .. $!size -> $y
+ {
+ for 1 .. $!size -> $z
+ {
+ @.elems[$x; $y; $z] = $init;
+ }
+ }
+ }
+}
+
+
+multi method queen ($id, $x, $y, $z)
+{
+ die "Blacked out position $x, $y, $z " if @.elems[$x; $y; $z] ne self.blank;
+
+ @.elems[$x; $y; $z] = $id;
+
+ my $min = 1;
+ my $max = self.size;
+ my $blackout = $id.lc;
+
+ for -1, 0, 1 -> $xx
+ {
+ for -1, 0, 1 -> $yy
+ {
+ for -1, 0, 1 -> $zz
+ {
+ next if $xx == $yy == $zz == 0; # The Queen is here
+
+ for (1 .. $max) -> $h
+ {
+ my $xxx = $x + $xx * $h;
+ my $yyy = $y + $yy * $h;
+ my $zzz = $z + $zz * $h;
+ next if any($xxx, $yyy, $zzz) < $min;
+ next if any($xxx, $yyy, $zzz) > $max;
+ @.elems[ $xxx; $yyy; $zzz] = $blackout;
+ }
+ }
+ }
+ }
+}
+
+
+multi method queen ($id, $xyz)
+{
+ my ($x, $y, $z) = $xyz.split(";");
+
+ die "Queen position out of range (1 .. { self.size })" if any($x, $y, $z) < 1;
+ die "Queen position out of range (1 .. { self.size })" if any($x, $y, $z) > self.size;
+
+ self.queen($id, $x, $y, $z);
+}
+
+
+method display ($colour, $layer-from = 1, $layer-to = self.size)
+{
+ for 1 .. self.size -> $y
+ {
+ for $layer-from .. $layer-to -> $x
+ {
+ for 1 .. self.size -> $z
+ {
+ if $colour && $colour eq "html"
+ {
+ given @.elems[$x; $y; $z]
+ {
+ when self.blank { print html-red ~ $_ ~ html-stop; }
+ when /<[A..Z]>/ { print html-blue ~ $_ ~ html-stop; }
+ when /<[a..z]>/ { print html-green ~ $_ ~ html-stop; }
+ }
+ }
+ elsif $colour
+ {
+ given @.elems[$x; $y; $z]
+ {
+ when self.blank { print ansi-red ~ $_ ~ ansi-stop; }
+ when /<[A..Z]>/ { print ansi-blue ~ $_ ~ ansi-stop; }
+ when /<[a..z]>/ { print ansi-green ~ $_ ~ ansi-stop; }
+ }
+ }
+ else
+ {
+ print @.elems[$x; $y; $z], " ";
+ }
+ }
+ print " ";
+ }
+ say "":
+ }
+}
+
+
+method display-with-newlines($colour, $break-after)
+{
+ my $size = self.size;
+ my $start = 1;
+ my $stop = min($size, $break-after);
+
+ loop
+ {
+ self.display($colour, $start, $stop);
+ $start += $break-after;
+ $stop += $break-after;
+
+ last if $start > $size;
+ $stop = min($stop, $size);
+ print "\n\n";
+ }
+}
+
+
+method number-of-queens
+{
+ return @!elems[*;*;*].grep({ $_.defined }).grep( * ~~ /<[A..Z]>/ ).elems;
+}
+
+
+method get-empty-cell
+{
+ for 1 .. self.size -> $x
+ {
+ for 1 .. self.size -> $y
+ {
+ for 1 ..self.size -> $z
+ {
+ return "$x;$y;$z" if @.elems[$x;$y;$z] eq self.blank;
+ }
+ }
+ }
+ return;
+}
+
+
+method get-empty-cell-random
+{
+ for self.get-all-cells.flat.pick(*) -> $elem
+ {
+ my ($x, $y, $z) = $elem.split(";");
+ return "$x;$y;$z" if @.elems[$x;$y;$z] eq self.blank;
+ }
+ return;
+}
+
+
+method get-all-cells
+{
+ my @all;
+ for 1 .. self.size -> $x
+ {
+ for 1 .. self.size -> $y
+ {
+ for 1 ..self.size -> $z
+ {
+ @all.push("$x;$y;$z");
+ }
+ }
+ }
+ return @all;
+}
+
+
+method cell-is-free ($cell)
+{
+ my ($x, $y, $z) = $cell.split(";");
+ return self.elems[$x;$y;$z] eq self.blank;
+}
+
diff --git a/challenge-062/arne-sommer/raku/queen-cube b/challenge-062/arne-sommer/raku/queen-cube
new file mode 100755
index 0000000000..6b23f03141
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/queen-cube
@@ -0,0 +1,125 @@
+#! /usr/bin/env raku
+
+use lib "lib";
+use QueenCube;
+
+unit sub MAIN
+(
+ $size = 8,
+ :$id = 'Q',
+ :$empty =".",
+ :$queen,
+ :$colour,
+ :$newlines,
+ :$fill,
+ :$random,
+ :$silent,
+ :$get-the-best,
+ :$verbose
+);
+
+if $get-the-best
+{
+ get-the-best;
+}
+elsif $silent ~~ Int
+{
+ get-many-solutions;
+}
+else
+{
+ get-one-solution;
+}
+
+sub get-one-solution
+{
+ my $c = QueenCube.new(size => $size);
+
+ $c.init($empty);
+
+ if $queen
+ {
+ $c.queen($id, $_) for $queen.words;
+ }
+
+ if $fill || $random
+ {
+ loop
+ {
+ my $pos = $random ?? $c.get-empty-cell-random !! $c.get-empty-cell;
+ last unless defined $pos;
+ say ": Queen at $pos" if $verbose;
+ my ($x, $y, $z) = $pos.split(";");
+ $c.queen($id, $x, $y, $z);
+ }
+ }
+
+ unless $silent
+ {
+ $newlines
+ ?? $c.display-with-newlines($colour, $newlines)
+ !! $c.display($colour);
+ }
+
+ my $count = $c.number-of-queens;
+ say "Number of Queens: ", $count if $count > 1;
+
+ return $count;
+}
+
+
+sub get-many-solutions
+{
+ my @result;
+
+ @result.push(get-one-solution) for ^$silent;
+
+ my %result;
+
+ %result{$_}++ for @result;
+
+ say "$_ (%result{$_})" for %result.keys.sort;
+}
+
+
+sub get-the-best
+{
+ my Int $best-count = 0;
+ my $best-cube;
+
+ my $c = QueenCube.new(size => $size);
+ $c.init($empty);
+
+ iterate($c);
+
+ sub iterate ($cube)
+ {
+ for $cube.get-all-cells -> $cell
+ {
+ next unless $c.cell-is-free($cell);
+
+ my $copy = $cube.clone;
+ $copy.queen($id, $cell);
+
+ iterate($copy);
+ }
+
+ my $q = $cube.number-of-queens;
+ if $q > $best-count
+ {
+ say ": New best cube with $q Queens (old had $best-count)" if $verbose;
+ $best-count = $q;
+ $best-cube = $cube
+ }
+ elsif $verbose
+ {
+ say ": Considering cube with $q Queens";
+ }
+ }
+
+ $newlines
+ ?? $c.display-with-newlines($colour, $newlines)
+ !! $c.display($colour);
+
+ say "Number of Queens: ", $best-count;
+}
diff --git a/challenge-062/arne-sommer/raku/queen-cube-1 b/challenge-062/arne-sommer/raku/queen-cube-1
new file mode 100755
index 0000000000..ebd530bb35
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/queen-cube-1
@@ -0,0 +1,25 @@
+#! /usr/bin/env raku
+
+use lib "lib";
+use QueenCube;
+
+unit sub MAIN
+(
+ $size = 8,
+ :$id = 'Q',
+ :$empty =".",
+ :$queen,
+ :$colour
+);
+
+get-one-solution;
+
+sub get-one-solution
+{
+ my $c = QueenCube.new(size => $size);
+
+ $c.init($empty);
+ $c.queen($id, $queen) if $queen;
+
+ $c.display($colour);
+}
diff --git a/challenge-062/arne-sommer/raku/queen-cube-2 b/challenge-062/arne-sommer/raku/queen-cube-2
new file mode 100755
index 0000000000..7bc780690a
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/queen-cube-2
@@ -0,0 +1,32 @@
+#! /usr/bin/env raku
+
+use lib "lib";
+use QueenCube;
+
+unit sub MAIN
+(
+ $size = 8,
+ :$id = 'Q',
+ :$empty =".",
+ :$queen,
+ :$colour
+);
+
+get-one-solution;
+
+sub get-one-solution
+{
+ my $c = QueenCube.new(size => $size);
+
+ $c.init($empty);
+
+ if $queen
+ {
+ $c.queen($id, $_) for $queen.words;
+ }
+
+ $c.display($colour);
+
+ my $count = $c.number-of-queens;
+ say "Number of Queens: ", $count if $count > 1;
+}
diff --git a/challenge-062/arne-sommer/raku/queen-cube-3 b/challenge-062/arne-sommer/raku/queen-cube-3
new file mode 100755
index 0000000000..7f6d5ea6b1
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/queen-cube-3
@@ -0,0 +1,35 @@
+#! /usr/bin/env raku
+
+use lib "lib";
+use QueenCube;
+
+unit sub MAIN
+(
+ $size = 8,
+ :$id = 'Q',
+ :$empty =".",
+ :$queen,
+ :$colour,
+ :$newlines
+);
+
+get-one-solution;
+
+sub get-one-solution
+{
+ my $c = QueenCube.new(size => $size);
+
+ $c.init($empty);
+
+ if $queen
+ {
+ $c.queen($id, $_) for $queen.words;
+ }
+
+ $newlines
+ ?? $c.display-with-newlines($colour, $newlines)
+ !! $c.display($colour);
+
+ my $count = $c.number-of-queens;
+ say "Number of Queens: ", $count if $count > 1;
+}
diff --git a/challenge-062/arne-sommer/raku/queen-cube-4 b/challenge-062/arne-sommer/raku/queen-cube-4
new file mode 100755
index 0000000000..71705cfe3e
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/queen-cube-4
@@ -0,0 +1,49 @@
+#! /usr/bin/env raku
+
+use lib "lib";
+use QueenCube;
+
+unit sub MAIN
+(
+ $size = 8,
+ :$id = 'Q',
+ :$empty =".",
+ :$queen,
+ :$colour,
+ :$newlines,
+ :$fill,
+ :$random,
+);
+
+get-one-solution;
+
+sub get-one-solution
+{
+ my $c = QueenCube.new(size => $size);
+
+ $c.init($empty);
+
+ if $queen
+ {
+ $c.queen($id, $_) for $queen.words;
+ }
+
+ if $fill || $random
+ {
+ loop
+ {
+ my ($pos) = $random ?? $c.get-empty-cell-random !! $c.get-empty-cell;
+ last unless defined $pos;
+ say ": Queen at $pos" if $verbose;
+ my ($x, $y, $z) = $pos.split(";");
+ $c.queen($id, $x, $y, $z);
+ }
+ }
+
+ $newlines
+ ?? $c.display-with-newlines($colour, $newlines)
+ !! $c.display($colour);
+
+ my $count = $c.number-of-queens;
+ say "Number of Queens: ", $count if $count > 1;
+}
diff --git a/challenge-062/arne-sommer/raku/queen-cube-5 b/challenge-062/arne-sommer/raku/queen-cube-5
new file mode 100755
index 0000000000..2ca0ad01fb
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/queen-cube-5
@@ -0,0 +1,75 @@
+#! /usr/bin/env raku
+
+use lib "lib";
+use QueenCube;
+
+unit sub MAIN
+(
+ $size = 8,
+ :$id = 'Q',
+ :$empty =".",
+ :$queen,
+ :$colour,
+ :$newlines,
+ :$fill,
+ :$random,
+ :$silent
+);
+
+if $silent ~~ Int
+{
+ get-many-solutions;
+}
+else
+{
+ get-one-solution;
+}
+
+
+sub get-one-solution
+{
+ my $c = QueenCube.new(size => $size);
+
+ $c.init($empty);
+
+ if $queen
+ {
+ $c.queen($id, $_) for $queen.words;
+ }
+
+ if $fill || $random
+ {
+ loop
+ {
+ my ($pos) = $random ?? $c.get-empty-cell-random !! $c.get-empty-cell;
+ last unless defined $pos;
+ say ": Queen at $pos" if $verbose;
+ my ($x, $y, $z) = $pos.split(";");
+ $c.queen($id, $x, $y, $z);
+ }
+ }
+
+ unless $silent
+ {
+ $newlines
+ ?? $c.display-with-newlines($colour, $newlines)
+ !! $c.display($colour);
+ }
+
+ my $count = $c.number-of-queens;
+ say "Number of Queens: ", $count if $count > 1;
+}
+
+
+sub get-many-solutions
+{
+ my @result;
+
+ @result.push(get-one-solution) for ^$silent;
+
+ my %result;
+
+ %result{$_}++ for @result;
+
+ say "$_ (%result{$_})" for %result.keys.sort;
+}
diff --git a/challenge-062/arne-sommer/raku/sea b/challenge-062/arne-sommer/raku/sea
new file mode 100755
index 0000000000..294e52c2e8
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/sea
@@ -0,0 +1,34 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@files, :$verbose, :$u);
+
+say ": Files: @files[]" if $verbose;
+
+my @input = @files.elems
+ ?? IO::CatHandle.new(@files).lines
+ !! lines;
+
+say ": Content: @input[]" if $verbose;
+
+my %sort;
+my %seen;
+my @output;
+
+for @input -> $current
+{
+ my ($mailbox, $domain) = $current.split('@');
+
+ say ": Candidate: $mailbox @ { $domain.lc }" if $verbose;
+
+ if $u
+ {
+ my $candidate = $mailbox ~ '@' ~ $domain.lc;
+ next if %seen{$candidate};
+ %seen{$candidate} = True;
+ }
+
+ %sort{$current} = "{ $domain.lc } $mailbox";
+ @output.push: $current;
+}
+
+.say for @output.sort({ %sort{$^a} cmp %sort{$^b} });
diff --git a/challenge-062/arne-sommer/raku/sea-main b/challenge-062/arne-sommer/raku/sea-main
new file mode 100755
index 0000000000..1644920d60
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/sea-main
@@ -0,0 +1,34 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@files, :$verbose, :$u);
+
+say ": Files: @files[]" if $verbose;
+
+my @input = @files.elems
+ ?? IO::CatHandle.new(@files).lines
+ !! $*IN.lines;
+
+say ": Content: @input[]" if $verbose;
+
+my %sort;
+my %seen;
+my @output;
+
+for @input -> $current
+{
+ my ($mailbox, $domain) = $current.split('@');
+
+ say ": Candidate: $mailbox @ { $domain.lc }" if $verbose;
+
+ if $u
+ {
+ my $candidate = $mailbox ~ '@' ~ $domain.lc;
+ next if %seen{$candidate};
+ %seen{$candidate} = True;
+ }
+
+ %sort{$current} = "{ $domain.lc } $mailbox";
+ @output.push: $current;
+}
+
+.say for @output.sort({ %sort{$^a} cmp %sort{$^b} });
diff --git a/challenge-062/arne-sommer/raku/sea-simple b/challenge-062/arne-sommer/raku/sea-simple
new file mode 100755
index 0000000000..ae23411bfb
--- /dev/null
+++ b/challenge-062/arne-sommer/raku/sea-simple
@@ -0,0 +1,13 @@
+#! /usr/bin/env raku
+
+my @input = $*ARGFILES.lines;
+
+my %sort;
+
+for @input -> $current
+{
+ my ($mailbox, $domain) = $current.split('@');
+ %sort{$current} = "{ $domain.lc } $mailbox";
+}
+
+.say for @input.sort({ %sort{$^a} cmp %sort{$^b} });
diff --git a/stats/pwc-current.json b/stats/pwc-current.json
index 2e34519488..8ce66799df 100644
--- a/stats/pwc-current.json
+++ b/stats/pwc-current.json
@@ -1,123 +1,23 @@
{
- "legend" : {
- "enabled" : 0
- },
- "series" : [
- {
- "colorByPoint" : 1,
- "data" : [
- {
- "y" : 2,
- "name" : "Athanasius",
- "drilldown" : "Athanasius"
- },
- {
- "drilldown" : "Jared Martin",
- "name" : "Jared Martin",
- "y" : 1
- },
- {
- "drilldown" : "Javier Luque",
- "y" : 5,
- "name" : "Javier Luque"
- },
- {
- "drilldown" : "Laurent Rosenfeld",
- "y" : 3,
- "name" : "Laurent Rosenfeld"
- },
- {
- "drilldown" : "Leo Manfredi",
- "name" : "Leo Manfredi",
- "y" : 1
- },
- {
- "drilldown" : "Luca Ferrari",
- "y" : 2,
- "name" : "Luca Ferrari"
- },
- {
- "y" : 1,
- "name" : "Markus Holzer",
- "drilldown" : "Markus Holzer"
- },
- {
- "drilldown" : "Mohammad S Anwar",
- "y" : 3,
- "name" : "Mohammad S Anwar"
- },
- {
- "drilldown" : "Niels van Dijke",
- "name" : "Niels van Dijke",
- "y" : 2
- },
- {
- "name" : "Pete Houston",
- "y" : 1,
- "drilldown" : "Pete Houston"
- },
- {
- "drilldown" : "Richard Park",
- "y" : 1,
- "name" : "Richard Park"
- },
- {
- "drilldown" : "Roger Bell_West",
- "y" : 4,
- "name" : "Roger Bell_West"
- },
- {
- "drilldown" : "Saif Ahmed",
- "y" : 2,
- "name" : "Saif Ahmed"
- },
- {
- "drilldown" : "Sangeet Kar",
- "y" : 4,
- "name" : "Sangeet Kar"
- },
- {
- "y" : 3,
- "name" : "Shahed Nooshmand",
- "drilldown" : "Shahed Nooshmand"
- },
- {
- "drilldown" : "Simon Miner",
- "name" : "Simon Miner",
- "y" : 1
- },
- {
- "drilldown" : "Simon Proctor",
- "y" : 1,
- "name" : "Simon Proctor"
- },
- {
- "name" : "Wanderdoc",
- "y" : 1,
- "drilldown" : "Wanderdoc"
- },
- {
- "name" : "Yet Ebreo",
- "y" : 1,
- "drilldown" : "Yet Ebreo"
- }
- ],
- "name" : "Perl Weekly Challenge - 062"
- }
- ],
- "subtitle" : {
- "text" : "[Champions: 19] Last updated at 2020-05-31 22:28:16 GMT"
- },
- "yAxis" : {
- "title" : {
- "text" : "Total Solutions"
- }
- },
"drilldown" : {
"series" : [
{
- "id" : "Athanasius",
+ "data" : [
+ [
+ "Raku",
+ 2
+ ],
+ [
+ "Blog",
+ 1
+ ]
+ ],
+ "id" : "Arne Sommer",
+ "name" : "Arne Sommer"
+ },
+ {
"name" : "Athanasius",
+ "id" : "Athanasius",
"data" : [
[
"Perl",
@@ -130,16 +30,17 @@
]
},
{
+ "name" : "Jared Martin",
+ "id" : "Jared Martin",
"data" : [
[
"Perl",
1
]
- ],
- "name" : "Jared Martin",
- "id" : "Jared Martin"
+ ]
},
{
+ "name" : "Javier Luque",
"id" : "Javier Luque",
"data" : [
[
@@ -154,10 +55,11 @@
"Blog",
1
]
- ],
- "name" : "Javier Luque"
+ ]
},
{
+ "name" : "Laurent Rosenfeld",
+ "id" : "Laurent Rosenfeld",
"data" : [
[
"Perl",
@@ -171,19 +73,17 @@
"Blog",
1
]
- ],
- "name" : "Laurent Rosenfeld",
- "id" : "Laurent Rosenfeld"
+ ]
},
{
+ "name" : "Leo Manfredi",
"id" : "Leo Manfredi",
"data" : [
[
"Perl",
1
]
- ],
- "name" : "Leo Manfredi"
+ ]
},
{
"data" : [
@@ -192,18 +92,18 @@
2
]
],
- "name" : "Luca Ferrari",
- "id" : "Luca Ferrari"
+ "id" : "Luca Ferrari",
+ "name" : "Luca Ferrari"
},
{
+ "name" : "Markus Holzer",
"id" : "Markus Holzer",
"data" : [