diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-10-13 21:21:23 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-10-13 21:21:23 +0100 |
| commit | 7a7ff0194d2f038d7e9644a019fa5a17ad4925aa (patch) | |
| tree | 830408cdfec40e3a9fe9f51aeedfae3cee30c1a9 | |
| parent | 9413aa77625e076bc96176b7ae8b932cb78d0d9e (diff) | |
| download | perlweeklychallenge-club-7a7ff0194d2f038d7e9644a019fa5a17ad4925aa.tar.gz perlweeklychallenge-club-7a7ff0194d2f038d7e9644a019fa5a17ad4925aa.tar.bz2 perlweeklychallenge-club-7a7ff0194d2f038d7e9644a019fa5a17ad4925aa.zip | |
- Added solutions by Colin Crain.
| -rw-r--r-- | challenge-029/colin-crain/perl5/ch-1.pl | 91 | ||||
| -rw-r--r-- | challenge-029/colin-crain/perl5/ch-2.pl | 154 | ||||
| -rw-r--r-- | stats/pwc-current.json | 211 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 50 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 452 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 538 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 120 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 26 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 104 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 88 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 44 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 54 |
12 files changed, 1096 insertions, 836 deletions
diff --git a/challenge-029/colin-crain/perl5/ch-1.pl b/challenge-029/colin-crain/perl5/ch-1.pl new file mode 100644 index 0000000000..479978c97d --- /dev/null +++ b/challenge-029/colin-crain/perl5/ch-1.pl @@ -0,0 +1,91 @@ +#! /opt/local/bin/perl +# +# brace_expansion.pl +# +# 29 Task #1: +# Write a script to demonstrate brace expansion. For example, script would take +# command line argument Perl {Daily,Weekly,Monthly,Yearly} Challenge and should +# expand it and print like below: +# +# Perl Daily Challenge +# +# Perl Weekly Challenge +# +# Perl Monthly Challenge +# +# Perl Yearly Challenge +# +# method: this seems like a job for a regex. Although not specified, let's make +# it recursive, to accommodate multiple bracketed blocks. Nesting braces, +# on the other hand, make no sense, won't parse right and need to be +# escaped to avoid unexpected results. Both inside and outside the block +# whitespace is preserved. The expanded text is inserted as is without +# additional spacing. Originally I had allowed whitespace inside the block +# for readability, which was ignored on rendering, but removed this to +# maximize flexability in inserting text fragments. Escaped brackets are +# ignored by the parser and passed through unchanged. +# +# results: +# $ ./brace_expansion.pl "Perl{ista's,esque,ite,escent, One Knit Two} {Daily,Weekly,Monthly,Yearly} Challenge" +# Perlista's Daily Challenge +# Perlista's Weekly Challenge +# Perlista's Monthly Challenge +# Perlista's Yearly Challenge +# Perlesque Daily Challenge +# Perlesque Weekly Challenge +# Perlesque Monthly Challenge +# Perlesque Yearly Challenge +# Perlite Daily Challenge +# Perlite Weekly Challenge +# Perlite Monthly Challenge +# Perlite Yearly Challenge +# Perlescent Daily Challenge +# Perlescent Weekly Challenge +# Perlescent Monthly Challenge +# Perlescent Yearly Challenge +# Perl One Knit Two Daily Challenge +# Perl One Knit Two Weekly Challenge +# Perl One Knit Two Monthly Challenge +# Perl One Knit Two Yearly Challenge +# +# 2019 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + +use warnings; +use strict; +use feature ":5.26"; + +## ## ## ## ## MAIN + +my $input = shift @ARGV; + +my @output = expand_braces($input); + +say (join "\n", @output); + +## ## ## ## ## SUBS + +sub expand_braces { + my $input = shift; + my @expanded; + + if ( $input =~ m/ ^(.*?) ## group 1: from the beginning, whatever was before the brackets, minimally matched + (?<!\\)\{ ## a left bracket not preceeded by a backslash + (.*?) ## group 2: the bracketed text list, minimally matched + (?<!\\)\} ## a right bracket not preceeded by a backslash + (.*?)$ /x ) { ## group 3: whatever is left until the end, minimally matched + my $pre = $1; + my $post = $3; + my @wordlist = split /,/, $2; + + ## insert the word and recursively build an expanded array + for my $word ( @wordlist ){ + push @expanded, expand_braces("$pre$word$post"); + } + return @expanded; + } + else { + ## if no match pass the input right back out + return $input; + } +} diff --git a/challenge-029/colin-crain/perl5/ch-2.pl b/challenge-029/colin-crain/perl5/ch-2.pl new file mode 100644 index 0000000000..ee2ba2535a --- /dev/null +++ b/challenge-029/colin-crain/perl5/ch-2.pl @@ -0,0 +1,154 @@ +#! /opt/local/bin/perl +# +# c_function.pl +# +# 29 Task #2: +# Write a script to demonstrate calling a C function. It could be any +# user defined or standard C function. +# +# method: +# The easiest way to go about this is to use the module Inline::C. One still +# may need some familiarity with perlapi and perhaps perlguts to interact smoothly +# with Perl, but much less so than grappling directly with XS. +# +# make_primes( int num_primes, int quantity_asked ) +# To demonstrate the use of a C function, we will first need +# something that can really benefit from the added speed, in +# this case a rewrite of the prime-finding by trial division +# function last seen in PWC #23. This was rewritten in C with a +# few more optimizations added, and further modified to return +# a requested number of values at the end of a generated list +# of a specified number of primes. So we pass in values for the +# number of primes to generate and the number from the end of +# that list to display. To produce this variable-length list of +# values we will manually place the requested number of items +# on the Stack to be returned by the function. (Alternately we +# could insert them in a Perl array and return a reference) +# Because we do this manually, the function itself returns type +# void. Inline::C provides macros to perform this magic of +# directly manipulating the Stack, which we employ in the +# example. If we request more primes than we generate, rather +# than return a short list we choose to return no elements at +# all. +# +# In this example we use the perlapi functions newSViv( int ) +# -- which creates a new SV integer value, and sv_2mortal( SV +# ) which flags a variable for garbage collection when is no +# longer needed to be around. +# +# print_primes( *SV some_prime, ... ): +# Once we have a list of requested primes, we might wish to examine +# them in tabular form. This function takes a variable sized list of +# integers and prints such a table to STDOUT. +# +# usage: ./c_function.pl 2000000 10 +# This produces a table of the last 10 primes of a list of 2,000,000 +# +# +# +# 2019 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + +use warnings; +use strict; +use feature ":5.26"; + +## ## ## ## ## MAIN + +## fetch the number of primes to generate and the number requested to be displayed off the end of that list +my ($number_of_primes, $number_requested) = @ARGV; + +print_primes( make_primes($number_of_primes, $number_requested) ); + +use Inline C => <<'END_OF_C_CODE'; +void make_primes( int num_primes, int quantity_asked ) { +/* returns array of Perl SV*s on the Stack, + the quantity_asked number of primes from the + end of a generated list of primes num_primes long. + The unreturned primes are not kept. */ + +/* the bool type seems to already be defined somewhere in the headers + loaded by Inline::C so this does not appear to be strictly required. */ + #include <stdbool.h> + +/* initialize variables associated with accessing the Stack */ + Inline_Stack_Vars; + +/* reset the stack pointer before we push output data to it */ + Inline_Stack_Reset; + +/* if the number of primes requested is greater than the number generated, fail and return (-1) */ + if ( quantity_asked > num_primes ) { + Inline_Stack_Push( sv_2mortal(newSViv( -1 )) ); + +/* make sure we call this to wrap up the stack */ + Inline_Stack_Done; + return; + } + +/* we will only push the first prime, 2 on if it will be required in the requested number of values to be returned */ + if ( quantity_asked == num_primes ) { + +/* if yes, to push the integer 2 on the Stack and start the prime list. We first cast it into a + Perl SV, then mark it as "mortal", to be collected as once copied to the Stack it is no longer + necessary and if allowed to remain will leak memory */ + Inline_Stack_Push( sv_2mortal(newSViv( 2 )) ); + } + + + int candidate; + int count = 0; + for( candidate = 3; count <= (num_primes - 2); candidate += 2 ) { + int sqrt_candidate = sqrt( candidate ); + bool is_prime = true; + int test; + for( test = 3; ( test <= sqrt_candidate ) && ( is_prime == 1 ); test += 2 ) { + if( candidate % test == 0 ) { + is_prime = false; + } + } + if( is_prime == true ) { + count++; + + if (count > num_primes - (quantity_asked + 1) ) { + + /* as above, we need to first cast data as a Perl SV* type, + then label it mortal for collection after it is copied over to the Stack*/ + Inline_Stack_Push( sv_2mortal(newSViv( candidate )) ); + } + } + } + + /* make sure we call this to wrap up the Stack */ + Inline_Stack_Done; +} + +void print_primes ( SV* some_prime, ... ){ +/* given a varible length list of primes, prints out a nice little enumerated table of the primes requested */ + +/* initialize variables associated with accessing the Stack */ + Inline_Stack_Vars; + + int idx; + int count = 1; + + printf("request # | prime\n"); + printf("-------------+-----------\n"); + +/* Inline_Stack_Items contains the number of values on the Stack */ +/* Inline_Stack_Item(idx) contains the value at that index */ +/* SvIV coerces an SV* into a integer value */ + for (idx = 0; idx < Inline_Stack_Items; idx++, count++) { + printf("%5d | %7d\n", count, SvIV( Inline_Stack_Item(idx) )); + } + + /* null out any data in the Stack */ + Inline_Stack_Void; + +/* make sure we call this to wrap up the Stack */ + Inline_Stack_Done; +} + +END_OF_C_CODE diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 57297d1613..45fb744b93 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,39 +1,20 @@ { "subtitle" : { - "text" : "[Champions: 22] Last updated at 2019-10-13 15:26:08 GMT" - }, - "chart" : { - "type" : "column" - }, - "tooltip" : { - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", - "followPointer" : 1, - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>" - }, - "plotOptions" : { - "series" : { - "borderWidth" : 0, - "dataLabels" : { - "enabled" : 1, - "format" : "{point.y}" - } - } + "text" : "[Champions: 23] Last updated at 2019-10-13 20:21:00 GMT" }, "drilldown" : { "series" : [ { "name" : "Andrezgz", + "id" : "Andrezgz", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "Andrezgz" + ] }, { - "name" : "Arne Sommer", - "id" : "Arne Sommer", "data" : [ [ "Perl 6", @@ -43,17 +24,29 @@ "Blog", 1 ] - ] + ], + "id" : "Arne Sommer", + "name" : "Arne Sommer" }, { + "name" : "Burkhard Nickels", "id" : "Burkhard Nickels", "data" : [ [ "Perl 5", 2 ] + ] + }, + { + "data" : [ + [ + "Perl 5", + 2 + ] ], - "name" : "Burkhard Nickels" + "name" : "Colin Crain", + "id" : "Colin Crain" }, { "data" : [ @@ -66,16 +59,17 @@ "name" : "Daniel Mita" }, { + "name" : "Dave Cross", "id" : "Dave Cross", "data" : [ [ "Perl 5", 2 ] - ], - "name" : "Dave Cross" + ] }, { + "name" : "Dave Jacoby", "id" : "Dave Jacoby", "data" : [ [ @@ -86,28 +80,27 @@ "Blog", 1 ] - ], - "name" : "Dave Jacoby" + ] }, { - "name" : "Duane Powell", - "id" : "Duane Powell", "data" : [ [ "Perl 5", 2 ] - ] + ], + "name" : "Duane Powell", + "id" : "Duane Powell" }, { "id" : "E. Choroba", + "name" : "E. Choroba", "data" : [ [ "Perl 5", 2 ] - ], - "name" : "E. Choroba" + ] }, { "data" : [ @@ -124,13 +117,13 @@ "name" : "Joelle Maslak" }, { - "id" : "Kevin Colyer", "data" : [ [ "Perl 6", 2 ] ], + "id" : "Kevin Colyer", "name" : "Kevin Colyer" }, { @@ -140,21 +133,20 @@ 2 ] ], - "id" : "Kivanc Yazan", - "name" : "Kivanc Yazan" + "name" : "Kivanc Yazan", + "id" : "Kivanc Yazan" }, { + "id" : "Lars Thegler", + "name" : "Lars Thegler", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "Lars Thegler", - "name" : "Lars Thegler" + ] }, { - "name" : "Laurent Rosenfeld", "data" : [ [ "Perl 5", @@ -169,31 +161,32 @@ 1 ] ], - "id" : "Laurent Rosenfeld" + "id" : "Laurent Rosenfeld", + "name" : "Laurent Rosenfeld" }, { - "id" : "Lubos Kolouch", "data" : [ [ "Perl 5", 2 ] ], - "name" : "Lubos Kolouch" + "name" : "Lubos Kolouch", + "id" : "Lubos Kolouch" }, { - "id" : "Markus Holzer", "data" : [ [ "Perl 6", 2 ] ], + "id" : "Markus Holzer", "name" : "Markus Holzer" }, { - "name" : "Noud", "id" : "Noud", + "name" : "Noud", "data" : [ [ "Perl 6", @@ -212,13 +205,13 @@ ] }, { - "id" : "Rage311", "data" : [ [ "Perl 5", 2 ] ], + "id" : "Rage311", "name" : "Rage311" }, { @@ -240,8 +233,8 @@ ] }, { - "name" : "Steven Wilson", "id" : "Steven Wilson", + "name" : "Steven Wilson", "data" : [ [ "Perl 5", @@ -260,12 +253,10 @@ 2 ] ], - "id" : "Ulrich Rieke", - "name" : "Ulrich Rieke" + "name" : "Ulrich Rieke", + "id" : "Ulrich Rieke" }, { - "name" : "Yet Ebreo", - "id" : "Yet Ebreo", "data" : [ [ "Perl 5", @@ -279,56 +270,61 @@ "Blog", 2 ] - ] + ], + "id" : "Yet Ebreo", + "name" : "Yet Ebreo" } ] }, - "title" : { - "text" : "Perl Weekly Challenge - 029" + "xAxis" : { + "type" : "category" }, "series" : [ { - "colorByPoint" : 1, - "name" : "Perl Weekly Challenge - 029", "data" : [ { + "name" : "Andrezgz", "y" : 2, - "drilldown" : "Andrezgz", - "name" : "Andrezgz" + "drilldown" : "Andrezgz" }, { "y" : 3, - "drilldown" : "Arne Sommer", - "name" : "Arne Sommer" + "name" : "Arne Sommer", + "drilldown" : "Arne Sommer" }, { - "name" : "Burkhard Nickels", + "drilldown" : "Burkhard Nickels", "y" : 2, - "drilldown" : "Burkhard Nickels" + "name" : "Burkhard Nickels" }, { - "name" : "Daniel Mita", "y" : 2, - "drilldown" : "Daniel Mita" + "name" : "Colin Crain", + "drilldown" : "Colin Crain" }, { + "drilldown" : "Daniel Mita", "y" : 2, + "name" : "Daniel Mita" + }, + { "drilldown" : "Dave Cross", - "name" : "Dave Cross" + "name" : "Dave Cross", + "y" : 2 }, { "drilldown" : "Dave Jacoby", - "y" : 3, - "name" : "Dave Jacoby" + "name" : "Dave Jacoby", + "y" : 3 }, { + "drilldown" : "Duane Powell", "name" : "Duane Powell", - "y" : 2, - "drilldown" : "Duane Powell" + "y" : 2 }, { - "y" : 2, "drilldown" : "E. Choroba", + "y" : 2, "name" : "E. Choroba" }, { @@ -338,81 +334,100 @@ }, { "name" : "Kevin Colyer", - "drilldown" : "Kevin Colyer", - "y" : 2 + "y" : 2, + "drilldown" : "Kevin Colyer" }, { + "y" : 2, "name" : "Kivanc Yazan", - "drilldown" : "Kivanc Yazan", - "y" : 2 + "drilldown" : "Kivanc Yazan" }, { + "drilldown" : "Lars Thegler", "name" : "Lars Thegler", - "y" : 2, - "drilldown" : "Lars Thegler" + "y" : 2 }, { - "y" : 4, "drilldown" : "Laurent Rosenfeld", + "y" : 4, "name" : "Laurent Rosenfeld" }, { + "name" : "Lubos Kolouch", "y" : 2, - "drilldown" : "Lubos Kolouch", - "name" : "Lubos Kolouch" + "drilldown" : "Lubos Kolouch" }, { - "name" : "Markus Holzer", + "drilldown" : "Markus Holzer", "y" : 2, - "drilldown" : "Markus Holzer" + "name" : "Markus Holzer" }, { "name" : "Noud", - "drilldown" : "Noud", - "y" : 2 + "y" : 2, + "drilldown" : "Noud" }, { - "drilldown" : "Prajith P", "y" : 1, - "name" : "Prajith P" + "name" : "Prajith P", + "drilldown" : "Prajith P" }, { - "name" : "Rage311", "drilldown" : "Rage311", - "y" : 2 + "y" : 2, + "name" : "Rage311" }, { + "y" : 4, "name" : "Roger Bell West", - "drilldown" : "Roger Bell West", - "y" : 4 + "drilldown" : "Roger Bell West" }, { - "drilldown" : "Steven Wilson", "y" : 1, - "name" : "Steven Wilson" + "name" : "Steven Wilson", + "drilldown" : "Steven Wilson" }, { - "name" : "Ulrich Rieke", "drilldown" : "Ulrich Rieke", + "name" : "Ulrich Rieke", "y" : 3 }, { - "name" : "Yet Ebreo", "y" : 6, + "name" : "Yet Ebreo", "drilldown" : "Yet Ebreo" } - ] + ], + "colorByPoint" : 1, + "name" : "Perl Weekly Challenge - 029" } ], - "xAxis" : { - "type" : "category" + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "enabled" : 1, + "format" : "{point.y}" + } + } }, - "legend" : { - "enabled" : 0 + "title" : { + "text" : "Perl Weekly Challenge - 029" + }, + "tooltip" : { + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", + "followPointer" : 1 }, "yAxis" : { "title" : { "text" : "Total Solutions" } + }, + "legend" : { + "enabled" : 0 + }, + "chart" : { + "type" : "column" } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 5a8baa147c..44930a9d52 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,47 +1,44 @@ { + "tooltip" : { + "pointFormat" : "<b>{point.y:.0f}</b>" + }, + "legend" : { + "enabled" : "false" + }, + "subtitle" : { + "text" : "Last updated at 2019-10-13 20:21:15 GMT" + }, "xAxis" : { "type" : "category", "labels" : { "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" } } }, - "subtitle" : { - "text" : "Last updated at 2019-10-13 15:26:32 GMT" - }, - "chart" : { - "type" : "column" - }, - "title" : { - "text" : "Perl Weekly Challenge Contributions - 2019" - }, - "tooltip" : { - "pointFormat" : "<b>{point.y:.0f}</b>" - }, "yAxis" : { "title" : { "text" : null }, "min" : 0 }, - "legend" : { - "enabled" : "false" + "chart" : { + "type" : "column" }, "series" : [ { "dataLabels" : { - "format" : "{point.y:.0f}", + "y" : 10, "color" : "#FFFFFF", + "rotation" : -90, + "align" : "right", "enabled" : "true", + "format" : "{point.y:.0f}", "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - }, - "y" : 10, - "align" : "right", - "rotation" : -90 + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + } }, "data" : [ [ @@ -50,7 +47,7 @@ ], [ "Perl 5", - 1167 + 1169 ], [ "Perl 6", @@ -59,5 +56,8 @@ ], "name" : "Contributions" } - ] + ], + "title" : { + "text" : "Perl Weekly Challenge Contributions - 2019" + } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 7cd53ebe72..d85e047581 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,14 +1,186 @@ { - "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2019-10-13 15:26:32 GMT" + "chart" : { + "type" : "column" + }, + "series" : [ + { + "colorByPoint" : "true", + "name" : "Perl Weekly Challenge Languages", + "data" : [ + { + "y" : 132, + "drilldown" : "001", + "name" : "#001" + }, + { + "y" : 104, + "drilldown" : "002", + "name" : "#002" + }, + { + "name" : "#003", + "drilldown" : "003", + "y" : 66 + }, + { + "name" : "#004", + "drilldown" : "004", + "y" : 86 + }, + { + "name" : "#005", + "drilldown" : "005", + "y" : 66 + }, + { + "y" : 47, + "drilldown" : "006", + "name" : "#006" + }, + { + "name" : "#007", + "y" : 55, + "drilldown" : "007" + }, + { + "name" : "#008", + "drilldown" : "008", + "y" : 69 + }, + { + "drilldown" : "009", + "y" : 68, + "name" : "#009" + }, + { + "name" : "#010", + "y" : 60, + "drilldown" : "010" + }, + { + "name" : "#011", + "drilldown" : "011", + "y" : 78 + }, + { + "y" : 83, + "drilldown" : "012", + "name" : "#012" + }, + { + "name" : "#013", + "drilldown" : "013", + "y" : 76 + }, + { + "drilldown" : "014", + "y" : 95, + "name" : "#014" + }, + { + "y" : 93, + "drilldown" : "015", + "name" : "#015" + }, + { + "name" : "#016", + "y" : 66, + "drilldown" : "016" + }, + { + "name" : "#017", + "drilldown" : "017", + "y" : 79 + }, + { + "name" : "#018", + "y" : 76, + "drilldown" : "018" + }, + { + "y" : 95, + "drilldown" : "019", + "name" : "#019" + }, + { + "y" : 95, + "drilldown" : "020", + "name" : "#020" + }, + { + "drilldown" : "021", + "y" : 67, + "name" : "#021" + }, + { + "name" : "#022", + "drilldown" : "022", + "y" : 63 + }, + { + "drilldown" : "023", + "y" : 91, + "name" : "#023" + }, + { + "name" : "#024", + "drilldown" : "024", + "y" : 70 + }, + { + "name" : "#025", + "drilldown" : "025", + "y" : 55 + }, + { + "name" : "#026", + "drilldown" : "026", + "y" : 70 + }, + { + "name" : "#027", + "drilldown" : "027", + "y" : 53 + }, + { + "drilldown" : "028", + "y" : 72, + "name" : "#028" + }, + { + "y" : 55, + "drilldown" : "029", + "name" : "#029" + } + ] + } + ], + "title" : { + "text" : "Perl Weekly Challenge Language" }, "xAxis" : { "type" : "category" }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2019-10-13 20:21:15 GMT" + }, + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "enabled" : 1, + "format" : "{point.y}" + } + } + }, "drilldown" : { "series" : [ { - "id" : "001", "data" : [ [ "Perl 5", @@ -23,6 +195,7 @@ 11 ] ], + "id" : "001", "name" : "001" }, { @@ -44,6 +217,7 @@ "id" : "002" }, { + "name" : "003", "id" : "003", "data" : [ [ @@ -58,11 +232,9 @@ "Blog", 8 ] - ], - "name" : "003" + ] }, { - "id" : "004", "name" : "004", "data" : [ [ @@ -77,7 +249,8 @@ "Blog", 9 ] - ] + ], + |
