aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-021/kevin-colyer/perl6/ch-1.p669
-rw-r--r--challenge-021/kevin-colyer/perl6/ch-2.p6279
-rw-r--r--stats/pwc-current.json329
-rw-r--r--stats/pwc-language-breakdown-summary.json56
-rw-r--r--stats/pwc-language-breakdown.json182
-rw-r--r--stats/pwc-leaders.json852
-rw-r--r--stats/pwc-summary-1-30.json44
-rw-r--r--stats/pwc-summary-31-60.json40
-rw-r--r--stats/pwc-summary-61-90.json96
-rw-r--r--stats/pwc-summary-91-120.json66
-rw-r--r--stats/pwc-summary.json254
11 files changed, 1315 insertions, 952 deletions
diff --git a/challenge-021/kevin-colyer/perl6/ch-1.p6 b/challenge-021/kevin-colyer/perl6/ch-1.p6
new file mode 100644
index 0000000000..ec9f67143c
--- /dev/null
+++ b/challenge-021/kevin-colyer/perl6/ch-1.p6
@@ -0,0 +1,69 @@
+#!/usr/bin/perl6
+use v6;
+
+# 20.1 Write a script to calculate the value of e, also known as Euler’s number and Napier’s constant.
+
+# Let's do 5 different ways for fun!
+
+sub e_sum_infinte_series($i) {
+ my $e=1;
+ for ^$i { state $j=1; state $n=1;
+ $j*=1/$n;
+ $n++;
+ $e+=$j;
+ }
+ return $e;
+}
+
+sub e_sum_infinite_series_limit($n) {
+ return (1 + 1/$n) ** $n
+};
+
+sub e_continued_fraction($n) {
+ # calculated in reverse order to avoid recursion
+ my $frac=1;
+ my @seq=lazy gather for 1..Inf -> $a {take 1; take 2*$a; take 1} ;
+ for (0..^$n).reverse -> $i {
+ $frac=1/(@seq[$i]+$frac);
+ }
+ return $frac+2;
+};
+
+sub e_continued_fraction_faster($n) {
+ # calculated in reverse order to avoid recursion
+ my $frac=1;
+ # we skip a step in sequence here as we add it at end...
+ my @seq=6,-> $a { $a+4 } ... * ;
+ for (0..^$n-1).reverse -> $i {
+ $frac=1/(@seq[$i]+$frac);
+ }
+ # Final (i.e.) first iteration here as it differnt...
+ return 1+2/(1+$frac);
+};
+
+sub V() {
+ my $n=0;
+ my $sumX=0;
+ loop {
+ $sumX+=1.rand;
+ $n++;
+ return $n if $sumX>1;
+ }
+};
+
+sub E($n) {
+ return ([+] (V() for ^$n) ) /$n
+};
+
+# calculate e with 10 iterations of infinite series - sum (1/n!)
+say e_sum_infinte_series(10);
+
+say e_sum_infinite_series_limit(10_000);
+
+say e_continued_fraction(10);
+
+# best results with this one
+say e_continued_fraction_faster(10);
+
+# Stochaistic derivation of e;
+say E(100_000);
diff --git a/challenge-021/kevin-colyer/perl6/ch-2.p6 b/challenge-021/kevin-colyer/perl6/ch-2.p6
new file mode 100644
index 0000000000..476953caff
--- /dev/null
+++ b/challenge-021/kevin-colyer/perl6/ch-2.p6
@@ -0,0 +1,279 @@
+#!/usr/bin/perl6
+use v6;
+
+use Test;
+
+#use Grammar::Tracer;
+
+# 21.2 Write a script for URL normalization based on (rfc3986)[https://en.wikipedia.org/wiki/URL_normalization]
+# Normalization https://tools.ietf.org/html/rfc3986#page-38
+
+#| URL normalization
+multi MAIN( $url ) {
+ my $m=urlParse($url);
+ say $url;
+ say stringifyURL($m.made);
+ say stringifyURL(normalise($m.made));
+ say normalise_URL($url);
+}
+
+#| Run tests
+multi MAIN ( "test" ) {
+
+ ok urlParse("http:/a/path"),"1 scheme and path test";
+ ok urlParse("http:/path"),"2 scheme and path test";
+ ok urlParse("http:/path/"),"2.1 scheme and path test";
+# ok urlParse("http:/path:/"),"2.2 scheme and path test";
+ ok urlParse("http://example.com/"),"2.3 scheme, authority and trailing slash test";
+
+ ok urlParse("http://localhost/path"),"3 scheme, authority and path test";
+ ok urlParse("http://example.com/path"),"4 scheme, authority and path test";
+ ok urlParse("http://example.co.uk/path"),"5 scheme, authority and path test";
+ ok urlParse("http://example.co.uk/path/"),"5.1 scheme, authority and path test training slash";
+ ok urlParse("http://example.co.uk:1234/path"),"6 scheme, authority and path test";
+ ok urlParse("http://1.1.1.1/path"),"7 scheme, authority and path test";
+ ok urlParse('http://kevin@example.co.uk/path'),"8 scheme, authority and path test";
+ ok urlParse('http://kevin:mypasword@example.co.uk/path'),"9 scheme, authority and path test";
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/path'),"10 scheme, authority and path test";
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/a'),"10.1 scheme, authority and path test";
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/'),"10.1 scheme, authority and path test";
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/path'),"11 scheme, authority and path test";
+ todo "can't get trailing slashes to work yet";
+# ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/path/'),"11.1 scheme, authority and path test (trailing slash)";
+# ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/long/very/path/'),"11.1 scheme, authority and path test (trailing slash)";
+
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/path?profile=true'),"12 s,a,p, and query test";
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/path?profile=true;black=white;up=down'),"13 s,a,p, multi q test";
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/path?profile=true&black=white&up=down'),"14 s,a,p, multi q test";
+
+ todo "can't get trailing delims to work yet";
+ #ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/path?profile=true&black=white&up=down&'),"14 s,a,p, multi q test with trailing delim";
+
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/path#m1'),"15 s,a,p, and fragment test";
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/path?profile=true#m1'),"16 s,a,p,q and fragment test";
+ ok urlParse('http://kevin:mypasword@example.co.uk:1234/a/path?profile=true;black=white;up=down#m1'),"17 s,a,p, multi q and fragment test";
+
+ ok urlParse("jdbc:mysql://1.1.1.1/path"),"7.1 double scheme, authority and path test";
+
+ my $url='jdbc:mysql://user:password@localhost:3306/pwc?profile=true#h1';
+ ok urlParse($url), "$url parses ok";
+
+ my $m=urlParse($url);
+ is ~$m.made<scheme> , 'jdbc:mysql' ,'testing <scheme> is made correctly';
+ is ~$m.made<userinfo> , 'user:password','testing <userinfo> is made correctly';
+ is ~$m.made<host> , 'localhost' ,'testing <host> is made correctly';
+ is ~$m.made<port> , '3306' ,'testing <port> is made correctly';
+ is ~$m.made<path> , '/pwc' ,'testing <path> is made correctly';
+ is ~$m.made<query> , 'profile=true' ,'testing <query> is made correctly';
+ is ~$m.made<fragment> , 'h1' ,'testing <fragment> is made correctly';
+
+ $m=urlParse("hTTp://eXample.com:80/path/");
+ my $s=stringifyURL(normalise($m.made));
+ is $s, "http://example.com/path/", "normalise case and port ok";
+
+ $m=urlParse("hTTp://127.0.0.1:80/path/");
+ $s=stringifyURL(normalise($m.made));
+ is $s, "http://localhost/path/", "normalise dotted quad localhost";
+
+ $s=stringifyURL(normalise(urlParse("hTTp://127.0.0.1:80/path/").made));
+ is $s, "http://localhost/path/", "normalise dotted quad localhost";
+
+ is normalise_dotted_quad({host => "127.0.0.1"})<host>,"localhost","normalise d q localhost";
+ is normalise_dotted_quad({host => "not dotted quad"})<host>,"not dotted quad","normalise d q not dotted quad";
+ is normalise_dotted_quad({host => "8.8.8.8.8"})<host>,"8.8.8.8.8","normalise d q not dotted quad 2";
+ is normalise_dotted_quad({host => "8.8.8.8"})<host>,"dns.google","normalise d q not nslookup ok";
+
+ $s=stringifyURL(normalise(urlParse("hTTp://8.8.8.8:80/path/").made));
+ is $s, "http://dns.google/path/", "normalise dotted quad localhost";
+ is normalise_percent_encoding("abc%3aabc"),"abc%3Aabc","percent encoding - uppercasing";
+
+ is normalise_percent_encoding("%41"),"A","unreserved words reduced";
+ is normalise_percent_encoding("%63"),"c","unreserved words reduced";
+ is normalise_percent_encoding("%7b"),'%7B',"reserved words ignored";
+
+
+ is normalise_path_segment(normalise_percent_encoding("//a/./b/../b/%63/%7bfoo%7d")),"//a/b/c/%7Bfoo%7D", "normalise path segment";
+ is normalise_path_segment(normalise_percent_encoding("/../c/d/../../a/b/../b/c")),"/a/b/c", "normalise path segment";
+
+ # WIKIPEDIA TESTS - NORMALIZATIONS THAT PRESERVE SEMANTICS
+ is normalise_URL("HTTP://www.Example.com/"),"http://www.example.com/","Converting the scheme and host to lower case.";
+
+ is normalise_URL("http://www.example.com/a%c2%b1b"),"http://www.example.com/a%C2%B1b", "Capitalizing letters in escape sequences.";
+ # All letters within a percent-encoding triplet (e.g., "%3A") are case-insensitive, and should be capitalized.
+
+ is normalise_URL("http://www.example.com/%7Eusername/"),"http://www.example.com/~username/", "Decoding percent-encoded octets of unreserved characters.";
+ # For consistency, percent-encoded octets in the ranges of ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39), hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should not be created by URI producers and, when found in a URI, should be decoded to their corresponding unreserved characters by URI normalizers.[2] Example:
+
+ is normalise_URL("http://www.example.com:80/bar.html"),"http://www.example.com/bar.html","Removing the default port.";
+ # The default port (port 80 for the “http” scheme) may be removed from (or added to) a URL. Example:
+
+ # WIKIPEDIA TESTS - NORMALIZATIONS THAT **USUALLY** PRESERVE SEMANTICS
+ is normalise_URL("http://www.example.com/../a/b/../c/./d.html"),"http://www.example.com/a/c/d.html", "Removing dot-segments. The segments";
+ # “..” and “.” can be removed from a URL according to the algorithm described in RFC 3986 (or a similar algorithm). Example:
+
+ done-testing;
+}
+
+my regex unreserved { <[ A..Z a..z 0..9 _ \- \. ~]> };
+
+grammar URL {
+ token TOP {
+ <scheme>
+ <authority>?
+ <path>?
+ <query>?
+ <fragment>?
+ }
+ # A non-empty scheme component followed by a colon (:), consisting of a sequence of characters beginning with a letter and followed by any combination of letters, digits, plus (+), period (.), or hyphen (-)
+ token allowedchars {
+ <alnum> | '+' | '.' | '-' # does alpha include _? does Alnum?
+ }
+ token scheme_text {
+ <alpha> <allowedchars>*
+ }
+ token scheme {
+ #| <scheme_text>
+ [ <scheme_text> ':' ] ** 1..2
+ #| <scheme_text> ':' <scheme_text>
+ }
+ #A path component, consisting of a sequence of path segments separated by a slash (/). A path is always defined for a URI, though the defined path may be empty (zero length). A segment may also be empty, resulting in two consecutive slashes (//) in the path component. A path component may resemble or map exactly to a file system path, but does not always imply a relation to one. If an authority component is present, then the path component must either be empty or begin with a slash (/). If an authority component is absent, then the path cannot begin with an empty segment, that is with two slashes (//), as the following characters would be interpreted as an authority component.[18] The final segment of the path may be referred to as a 'slug'.
+ token authority {
+ '//'
+ <userinfo>?
+ <host>
+ [':' <port>]?
+ }
+ token slug {
+ <alnum> | '_' | '-' | '.' | '~' | '%'
+ }
+ token slash {
+ '/'
+ }
+ token userinfo {
+ | <alnum>+ '@'
+ | <alnum>+ ':' <alnum>+ '@'
+ }
+ token host {
+ <alnum>+ ['.' <alnum>+]*
+ }
+ token port {
+ <digit>+
+ }
+ token path {
+ | <slash> [ <slug>+ <slash> ]* <slug>+ <slash>?
+ | <slash> <slug>+ <slash>?
+ | <slash>
+ }
+ # An optional query component preceded by a question mark (?), containing a query string of non-hierarchical data. Its syntax is not well defined, but by convention is most often a sequence of attribute–value pairs separated by a delimiter. (& or ;)
+ token query {
+ '?' [<attrib-value> <delim>]* <attrib-value> <delim>?
+ }
+ token attrib-value {
+ <slug>+ '=' <slug>+
+ }
+ token delim {
+ ';' | '&'
+ }
+ token fragment {
+ '#' <slug>+
+ }
+}
+
+class URL-actions {
+ method TOP ($/) {
+ make {
+ scheme => $<scheme>.subst(/\: $$/,""),
+ userinfo => $<authority><userinfo>.subst(/\@/,""),
+ host => $<authority><host>.Str,
+ port => $<authority><port>.Str,
+ path => $<path>.Str,
+ query => $<query>.subst(/^^ '?' /,""),
+ fragment => $<fragment>.subst(/^^ '#' /,""),
+ }
+ }
+}
+
+sub urlParse($url) {
+ my $m=quietly URL.parse($url, actions => URL-actions.new);
+ die "parse failed on [$url]" unless $m;
+ return $m;
+}
+
+sub normalise ($m) {
+ my %url = $m.kv;# normalise case
+ %url<scheme> = $m<scheme>.lc;
+ %url<host> = $m<host>.lc;
+
+ %url = normalise_default_port(%url);
+
+ %url = normalise_dotted_quad(%url);
+
+ %url<path> = normalise_percent_encoding(%url<path>);
+ %url<query> = normalise_percent_encoding(%url<query>);
+ %url<fragment>= normalise_percent_encoding(%url<fragment>);
+
+ %url<path> = normalise_path_segment(%url<path>);
+ return %url;
+}
+
+sub normalise_default_port(%url) {
+ my %sp = "http" => 80,
+ "ipp" => 631,
+ "ssh" => 22,
+ "ftp" => 23,
+ "https" => 443,
+ ;
+ %url<port> = "" if %sp{%url<scheme>}==%url<port>;
+ return %url;
+};
+
+sub normalise_dotted_quad(%url) {
+ %url<host> = "localhost" if %url<host> eq "127.0.0.1";
+ return %url unless %url<host> ~~ /^ \d+ \. \d+ \. \d+ \. \d+ $/;
+ my $shell = qq:x/nslookup %url<host>/.lines[0]; #:
+ $shell ~~ m/^ .* 'name' \s '=' \s (.*) \. $/;
+ %url<host> = $0;
+ return %url;
+};
+
+sub normalise_percent_encoding($s is copy) {
+ # reserved = ! ALPHA / DIGIT / "-" / "." / "_" / "~"
+ $s ~~ s:g/ (\% \w \w) /&percent_encoding_unreserve($0)/; #
+ return $s;
+}
+
+sub normalise_path_segment($p is copy) {
+ # regex remove /./ => /
+ $p ~~ s:g! \/ \. \/ !/!;
+
+ # regex remove /c/../b/ => /b/ - repeat this to remove /../../
+ while $p ~~ s:g! \/ \w+ \/ \. \. \/ !/! {} ;
+
+ # remove any leading double dots
+ $p ~~ s:g! ^ \/ \. \. \/ !/!;
+
+ return $p
+}
+
+sub percent_encoding_unreserve($s) {
+ my $per = $s.uc;
+ # decode
+ my $c = chr(:16($per.substr(1,2)));
+ $c = $per if $c !~~ m/<unreserved>/ ;
+ return $c;
+}
+
+sub stringifyURL($m) {
+ my $s= $m<scheme> ~"://";
+ $s~= $m<userinfo> ~ "@" if $m<userinfo>;
+ $s~= $m<host>;
+ $s~= ":" ~ $m<port> if $m<port>;
+ $s~= $m<path>;
+ $s~= "?" ~ $m<query> if $m<query>;
+ $s~= "#" ~ $m<fragment> if $m<fragment>;
+ return $s;
+}
+
+sub normalise_URL($url) {
+ return stringifyURL(normalise(urlParse($url).made));
+}
diff --git a/stats/pwc-current.json b/stats/pwc-current.json
index ea2e1af9a6..fdb2b01cc3 100644
--- a/stats/pwc-current.json
+++ b/stats/pwc-current.json
@@ -1,157 +1,40 @@
{
+ "tooltip" : {
+ "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>",
+ "followPointer" : 1,
+ "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>"
+ },
"title" : {
"text" : "Perl Weekly Challenge - 021"
},
- "plotOptions" : {
- "series" : {
- "borderWidth" : 0,
- "dataLabels" : {
- "enabled" : 1,
- "format" : "{point.y}"
- }
- }
- },
- "subtitle" : {
- "text" : "[Champions: 20] Last updated at 2019-08-18 21:29:54 GMT"
- },
- "xAxis" : {
- "type" : "category"
- },
"chart" : {
"type" : "column"
},
- "tooltip" : {
- "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>",
- "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>",
- "followPointer" : 1
- },
- "legend" : {
- "enabled" : 0
- },
"yAxis" : {
"title" : {
"text" : "Total Solutions"
}
},
- "series" : [
- {
- "name" : "Perl Weekly Challenge - 021",
- "data" : [
- {
- "name" : "Andrezgz",
- "y" : 2,
- "drilldown" : "Andrezgz"
- },
- {
- "name" : "Arne Sommer",
- "drilldown" : "Arne Sommer",
- "y" : 3
- },
- {
- "drilldown" : "Athanasius",
- "y" : 2,
- "name" : "Athanasius"
- },
- {
- "name" : "Daniel Mantovani",
- "y" : 2,
- "drilldown" : "Daniel Mantovani"
- },
- {
- "name" : "Dave Cross",
- "drilldown" : "Dave Cross",
- "y" : 2
- },
- {
- "name" : "Dave Jacoby",
- "y" : 2,
- "drilldown" : "Dave Jacoby"
- },
- {
- "name" : "Duane Powell",
- "drilldown" : "Duane Powell",
- "y" : 2
- },
- {
- "name" : "E. Choroba",
- "y" : 2,
- "drilldown" : "E. Choroba"
- },
- {
- "name" : "Guillermo Ramos",
- "drilldown" : "Guillermo Ramos",
- "y" : 2
- },
- {
- "name" : "Joelle Maslak",
- "y" : 4,
- "drilldown" : "Joelle Maslak"
- },
- {
- "y" : 1,
- "drilldown" : "Kian-Meng Ang",
- "name" : "Kian-Meng Ang"
- },
- {
- "name" : "Laurent Rosenfeld",
- "drilldown" : "Laurent Rosenfeld",
- "y" : 5
- },
- {
- "y" : 2,
- "drilldown" : "Lubos Kolouch",
- "name" : "Lubos Kolouch"
- },
- {
- "name" : "Noud",
- "drilldown" : "Noud",
- "y" : 2
- },
- {
- "name" : "Ozzy",
- "drilldown" : "Ozzy",
- "y" : 1
- },
- {
- "drilldown" : "Randy Lauen",
- "y" : 4,
- "name" : "Randy Lauen"
- },
- {
- "name" : "Roger Bell West",
- "y" : 4,
- "drilldown" : "Roger Bell West"
- },
- {
- "drilldown" : "Ruben Westerberg",
- "y" : 4,
- "name" : "Ruben Westerberg"
- },
- {
- "y" : 1,
- "drilldown" : "Simon Proctor",
- "name" : "Simon Proctor"
- },
- {
- "drilldown" : "Steven Wilson",
- "y" : 1,
- "name" : "Steven Wilson"
- }
- ],
- "colorByPoint" : 1
+ "plotOptions" : {
+ "series" : {
+ "dataLabels" : {
+ "format" : "{point.y}",
+ "enabled" : 1
+ },
+ "borderWidth" : 0
}
- ],
+ },
"drilldown" : {
"series" : [
{
+ "name" : "Andrezgz",
"data" : [
[
"Perl 5",
2
]
],
- "id" : "Andrezgz",
- "name" : "Andrezgz"
+ "id" : "Andrezgz"
},
{
"data" : [
@@ -183,27 +66,26 @@
},
{
"name" : "Daniel Mantovani",
+ "id" : "Daniel Mantovani",
"data" : [
[
"Perl 5",
2
]
- ],
- "id" : "Daniel Mantovani"
+ ]
},
{
- "name" : "Dave Cross",
"id" : "Dave Cross",
"data" : [
[
"Perl 5",
2
]
- ]
+ ],
+ "name" : "Dave Cross"
},
{
"name" : "Dave Jacoby",
- "id" : "Dave Jacoby",
"data" : [
[
"Perl 5",
@@ -213,39 +95,41 @@
"Blog",
1
]
- ]
+ ],
+ "id" : "Dave Jacoby"
},
{
- "name" : "Duane Powell",
- "id" : "Duane Powell",
"data" : [
[
"Perl 5",
2
]
- ]
+ ],
+ "id" : "Duane Powell",
+ "name" : "Duane Powell"
},
{
+ "id" : "E. Choroba",
"data" : [
[
"Perl 5",
2
]
],
- "id" : "E. Choroba",
"name" : "E. Choroba"
},
{
"name" : "Guillermo Ramos",
- "id" : "Guillermo Ramos",
"data" : [
[
"Perl 5",
2
]
- ]
+ ],
+ "id" : "Guillermo Ramos"
},
{
+ "name" : "Joelle Maslak",
"id" : "Joelle Maslak",
"data" : [
[
@@ -256,20 +140,30 @@
"Perl 6",
2
]
+ ]
+ },
+ {
+ "id" : "Kevin Colyer",
+ "data" : [
+ [
+ "Perl 6",
+ 2
+ ]
],
- "name" : "Joelle Maslak"
+ "name" : "Kevin Colyer"
},
{
- "id" : "Kian-Meng Ang",
"data" : [
[
"Perl 5",
1
]
],
+ "id" : "Kian-Meng Ang",
"name" : "Kian-Meng Ang"
},
{
+ "id" : "Laurent Rosenfeld",
"data" : [
[
"Perl 5",
@@ -284,7 +178,6 @@
1
]
],
- "id" : "Laurent Rosenfeld",
"name" : "Laurent Rosenfeld"
},
{
@@ -299,23 +192,23 @@
},
{
"name" : "Noud",
- "id" : "Noud",
"data" : [
[
"Perl 6",
2
]
- ]
+ ],
+ "id" : "Noud"
},
{
- "name" : "Ozzy",
"data" : [
[
"Perl 6",
1
]
],
- "id" : "Ozzy"
+ "id" : "Ozzy",
+ "name" : "Ozzy"
},
{
"id" : "Randy Lauen",
@@ -332,7 +225,7 @@
"name" : "Randy Lauen"
},
{
- "name" : "Roger Bell West",
+ "id" : "Roger Bell West",
"data" : [
[
"Perl 5",
@@ -347,7 +240,7 @@
1
]
],
- "id" : "Roger Bell West"
+ "name" : "Roger Bell West"
},
{
"data" : [
@@ -364,25 +257,147 @@
"name" : "Ruben Westerberg"
},
{
- "id" : "Simon Proctor",
"data" : [
[
"Perl 6",
1
]
],
+ "id" : "Simon Proctor",
"name" : "Simon Proctor"
},
{
- "name" : "Steven Wilson",
"id" : "Steven Wilson",
"data" : [
[
"Perl 5",
1
]
- ]
+ ],
+ "name" : "Steven Wilson"
}
]
- }
+ },
+ "legend" : {
+ "enabled" : 0
+ },
+ "xAxis" : {
+ "type" : "category"
+ },
+ "subtitle" : {
+ "text" : "[Champions: 21] Last updated at 2019-08-18 22:00:32 GMT"
+ },
+ "series" : [
+ {
+ "data" : [
+ {
+ "drilldown" : "Andrezgz",
+ "y" : 2,
+ "name" : "Andrezgz"
+ },
+ {
+ "y" : 3,
+ "drilldown" : "Arne Sommer",
+ "name" : "Arne Sommer"
+ },
+ {
+ "drilldown" : "Athanasius",
+ "y" : 2,
+ "name" : "Athanasius"
+ },
+ {
+ "y" : 2,
+ "drilldown" : "Daniel Mantovani",
+ "name" : "Daniel Mantovani"
+ },
+ {
+ "name" : "Dave Cross",
+ "drilldown" : "Dave Cross",
+ "y" : 2
+ },
+ {
+ "drilldown" : "Dave Jacoby",
+ "y" : 2,
+ "name" : "Dave Jacoby"
+ },
+ {
+ "y" : 2,
+ "drilldown" : "Duane Powell",
+ "name" : "Duane Powell"
+ },
+ {
+ "name" : "E. Choroba",
+ "y" : 2,
+ "drilldown" : "E. Choroba"
+ },
+ {
+ "drilldown" : "Guillermo Ramos",
+ "y" : 2,
+ "name" : "Guillermo Ramos"
+ },
+ {
+ "y" : 4,
+ "drilldown" : "Joelle Maslak",
+ "name" : "Joelle Maslak"
+ },
+ {
+ "name" : "Kevin Colyer",
+ "y" : 2,
+ "drilldown" : "Kevin Colyer"
+ },
+ {
+ "name" : "Kian-Meng Ang",
+ "drilldown" : "Kian-Meng Ang",
+ "y" : 1
+ },
+ {
+ "name" : "Laurent Rosenfeld",
+ "drilldown" : "Laurent Rosenfeld",
+ "y" : 5
+ },
+ {
+ "name" : "Lubos Kolouch",
+ "drilldown" : "Lubos Kolouch",
+ "y" : 2
+ },
+ {
+ "y" : 2,
+ "drilldown" : "Noud",
+ "name" : "Noud"
+ },
+ {
+ "name" : "Ozzy",
+ "drilldown" : "Ozzy",
+ "y" : 1
+ },
+ {
+ "drilldown" : "Randy Lauen",
+ "y" : 4,
+ "name" : "Randy Lauen"
+ },
+ {
+ "y" : 4,
+ "drilldown" : "Roger Bell West",
+ "name" : "Roger Bell West"
+ },
+ {
+ "drilldown" : "Ruben Westerberg",
+ "y" : 4,
+ "name" : "Ruben Westerberg"
+ },
+ {
+ "drilldown" : "Simon Proctor",
+ "y" : 1,
+ "name" : "Simon Proctor"
+ },
+ {
+ "y" : 1,
+ "drilldown" : "Steven Wilson",
+ "name" : "Steven Wilson"
+ }
+ ],
+ "colorByPoint" : 1,
+ "name" : "Perl Weekly Challenge - 021"
+ }
+ ]
}
diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json
index d2545280df..cb4d0be860 100644
--- a/stats/pwc-language-breakdown-summary.json
+++ b/stats/pwc-language-breakdown-summary.json
@@ -1,22 +1,4 @@
{
- "xAxis" : {
- "labels" : {
- "style" : {
- "fontFamily" : "Verdana, sans-serif",
- "fontSize" : "13px"
- }
- },
- "type" : "category"
- },
- "chart" : {
- "type" : "column"
- },
- "legend" : {
- "enabled" : "false"
- },
- "tooltip" : {
- "pointFormat" : "<b>{point.y:.0f}</b>"
- },
"series" : [
{
"data" : [
@@ -30,34 +12,52 @@
],
[
"Perl 6",
- 520
+ 522
]
],
"dataLabels" : {
- "color" : "#FFFFFF",
- "rotation" : -90,
+ "align" : "right",
+ "y" : 10,
"format" : "{point.y:.0f}",
+ "enabled" : "true",
+ "color" : "#FFFFFF",
"style" : {
- "fontSize" : "13px",
- "fontFamily" : "Verdana, sans-serif"
+ "fontFamily" : "Verdana, sans-serif",
+ "fontSize" : "13px"
},
- "align" : "right",
- "enabled" : "true",
- "y" : 10
+ "rotation" : -90
},
"name" : "Contributions"
}
],
+ "chart" : {
+ "type" : "column"
+ },
+ "legend" : {
+ "enabled" : "false"
+ },
+ "subtitle" : {
+ "text" : "Last updated at 2019-08-18 22:00:48 GMT"
+ },
"yAxis" : {
"min" : 0,
"title" : {
"text" : null
}
},
- "subtitle" : {
- "text" : "Last updated at 2019-08-18 21:30:33 GMT"
+ "tooltip" : {
+ "pointFormat" : "<b>{point.y:.0f}</b>"
},
"title" : {
"text" : "Perl Weekly Challenge Contributions - 2019"
+ },
+ "xAxis" : {
+ "type" : "category",
+ "labels" : {
+ "style" : {
+ "fontFamily" : "Verdana, sans-serif",
+ "fontSize" : "13px"
+ }
+ }
}
}
diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json
index 4a6eeef9ad..8d64c2ce97 100644
--- a/stats/pwc-language-breakdown.json
+++ b/stats/pwc-language-breakdown.json
@@ -1,14 +1,16 @@
{
- "title" : {
- "text" : "Perl Weekly Challenge Language"
- },
"subtitle" : {
- "text" : "Click the columns to drilldown the language breakdown. Last updated at 2019-08-18 21:30:33 GMT"
+ "text" : "Click the columns to drilldown the language breakdown. Last updated at 2019-08-18 22:00:48 GMT"
+ },
+ "legend" : {
+ "enabled" : "false"
+ },
+ "chart" : {
+ "type" : "column"
},
"drilldown" : {
"series" : [
{
- "id" : "001",
"name" : "001",
"data" : [
[
@@ -23,9 +25,12 @@
"Blog",
10
]
- ]
+ ],
+ "id" : "001"
},
{
+ "id" : "002",
+ "name" : "002",
"data" : [
[
"Perl 5",
@@ -39,13 +44,9 @@
"Blog",
9
]
- ],
- "name" : "002",
- "id" : "002"
+ ]
},
{
- "id" : "003",
- "name" : "003",
"data" : [
[
"Perl 5",
@@ -59,7 +60,9 @@
"Blog",
8
]
- ]
+ ],
+ "name" : "003",
+ "id" : "003"
},
{
"data" : [
@@ -81,7 +84,6 @@
},
{
"name" : "005",
- "id" : "005",
"data" : [
[
"Perl 5",
@@ -95,10 +97,10 @@
"Blog",
11
]
- ]
+ ],
+ "id" : "005"
},
{
- "name" : "006",
"id" : "006",
"data" : [
[
@@ -113,11 +115,10 @@
"Blog",
6
]
- ]
+ ],
+ "name" : "006"
},
{
- "id" : "007",
- "name" : "007",