From 42519717810ae3f1605ee4d4a47bc5fe3738da85 Mon Sep 17 00:00:00 2001 From: dcw Date: Sun, 3 Oct 2021 23:52:32 +0100 Subject: imported my solutions to this week's tasks, including a bonus (ch-2a.pl) which reads the relations from self-describing CSV files. All good clean fun:-) --- challenge-132/duncan-c-white/README | 119 ++++++++++++++++------- challenge-132/duncan-c-white/perl/ages | 7 ++ challenge-132/duncan-c-white/perl/ch-1.pl | 70 ++++++++++++++ challenge-132/duncan-c-white/perl/ch-2.pl | 139 ++++++++++++++++++++++++++ challenge-132/duncan-c-white/perl/ch-2a.pl | 150 +++++++++++++++++++++++++++++ challenge-132/duncan-c-white/perl/names | 7 ++ 6 files changed, 455 insertions(+), 37 deletions(-) create mode 100644 challenge-132/duncan-c-white/perl/ages create mode 100755 challenge-132/duncan-c-white/perl/ch-1.pl create mode 100755 challenge-132/duncan-c-white/perl/ch-2.pl create mode 100755 challenge-132/duncan-c-white/perl/ch-2a.pl create mode 100644 challenge-132/duncan-c-white/perl/names diff --git a/challenge-132/duncan-c-white/README b/challenge-132/duncan-c-white/README index 1df544175c..4918f2b94a 100644 --- a/challenge-132/duncan-c-white/README +++ b/challenge-132/duncan-c-white/README @@ -1,61 +1,106 @@ -Task 1: "Consecutive Arrays +TASK #1 - Mirror Dates -You are given a sorted list of unique positive integers. +You are given a date (yyyy/mm/dd). -Write a script to return list of arrays where the arrays are consecutive -integers. +Assuming, the given date is your date of birth. Write a script to find +the mirror dates of the given date. + +Assuming today is 2021/09/22. Example 1: - Input: (1, 2, 3, 6, 7, 8, 9) - Output: ([1, 2, 3], [6, 7, 8, 9]) +Input: 2021/09/18 +Output: 2021/09/14, 2021/09/26 + +On the date you were born, someone who was your current age, would have +been born on 2021/09/14. Someone born today will be your current age +on 2021/09/26. Example 2: - Input: (11, 12, 14, 17, 18, 19) - Output: ([11, 12], [14], [17, 18, 19]) +Input: 1975/10/10 +Output: 1929/10/27, 2067/09/05 -Example 3: +On the date you were born, someone who was your current age, would have +been born on 1929/10/27. Someone born today will be your current age +on 2067/09/05. - Input: (2, 4, 6, 8) - Output: ([2], [4], [6], [8]) +Example 3: -Example 4: +Input: 1967/02/14 +Output: 1912/07/08, 2076/04/30 - Input: (1, 2, 3, 4, 5) - Output: ([1, 2, 3, 4, 5]) -" +On the date you were born, someone who was your current age, would have +been born on 1912/07/08. Someone born today will be your current age +on 2076/04/30. -My notes: easy, should be able to do this in 1-pass. +MY NOTES: Sounds like a pretty easy date manipulation exercise: dob - delta, +today + delta where delta = today - date. The hardest part is working out +which Date manipulation module to use, as Perl has so many. -Task 2: "Find Pairs +TASK #2 - Hash Join -You are given a string of delimiter pairs and a string to search. +Write a script to implement Hash Join algorithm as suggested by wikipedia. -Write a script to return two strings, the first with any characters -matching the 'opening character' set, the second with any matching -the 'closing character' set. +1. For each tuple r in the build input R + 1.1 Add r to the in-memory hash table + 1.2 If the size of the hash table equals the maximum in-memory size: + 1.2.1 Scan the probe input S, and add matching join tuples to the output relation + 1.2.2 Reset the hash table, and continue scanning the build input R +2. Do a final scan of the probe input S and add the resulting join tuples to the output relation -Example 1: +Example Input: - Delimiter pairs: ""[]() - Search String: "I like (parens) and the Apple ][+" they said. -Output: - "([" - ")]" - -Example 2: - -Input: - Delimiter pairs: **//<> - Search String: /* This is a comment (in some languages) */ + @player_ages = ( + [20, "Alex" ], + [28, "Joe" ], + [38, "Mike" ], + [18, "Alex" ], + [25, "David" ], + [18, "Simon" ], + ); + + @player_names = ( + ["Alex", "Stewart"], + ["Joe", "Root" ], + ["Mike", "Gatting"], + ["Joe", "Blog" ], + ["Alex", "Jones" ], + ["Simon","Duane" ], + ); Output: - /**/< - /**/> -" -My notes: also pretty easy, if I've understood it right. Also doable in 1-pass. + Based on index = 1 of @players_age and index = 0 of @players_name. + + 20, "Alex", "Stewart" + 20, "Alex", "Jones" + 18, "Alex", "Stewart" + 18, "Alex", "Jones" + 28, "Joe", "Root" + 28, "Joe", "Blog" + 38, "Mike", "Gatting" + 18, "Simon", "Duane" + +MY NOTES: Ok, I think I understand, but I'm going to ignore the +whole "out of memory" part as that's too complicated. +Also, I can't see what logical order the example output is ordered by, +as far as I can see, the described algorithm leads to the order that I +produce - not the order the above example output shows; so I'm going to +ignore that too. After all, in a relation, order doesn't matter, right? + +So for the example I build %name2ages containing: +"Alex" => [20, 18], +"Joe" => [28], +"Mike" => [38], +"David" => [25], +"Simon" => [18]. +Then use %name2ages while iterating over @player_names. + +There's also the question of how to provide the relations, +in ch-2.pl I hard-coding them as arrays of pairs as shown above, +but see also ch-2a.pl which generalises them as files, read by Text::CSV +and containing fieldnames in row 1. diff --git a/challenge-132/duncan-c-white/perl/ages b/challenge-132/duncan-c-white/perl/ages new file mode 100644 index 0000000000..149e6c7563 --- /dev/null +++ b/challenge-132/duncan-c-white/perl/ages @@ -0,0 +1,7 @@ +age,forename +20,"Alex" +28,"Joe" +38,"Mike" +18,"Alex" +25,"David" +18,"Simon" diff --git a/challenge-132/duncan-c-white/perl/ch-1.pl b/challenge-132/duncan-c-white/perl/ch-1.pl new file mode 100755 index 0000000000..c91f966cec --- /dev/null +++ b/challenge-132/duncan-c-white/perl/ch-1.pl @@ -0,0 +1,70 @@ +#!/usr/bin/perl +# +# TASK #1 - Mirror Dates +# +# You are given a date (yyyy/mm/dd). +# +# Assuming, the given date is your date of birth. Write a script to find +# the mirror dates of the given date. +# +# Assuming today is 2021/09/22. +# +# Example 1: +# +# Input: 2021/09/18 +# Output: 2021/09/14, 2021/09/26 +# +# On the date you were born, someone who was your current age, would have +# been born on 2021/09/14. Someone born today will be your current age +# on 2021/09/26. +# +# Example 2: +# +# Input: 1975/10/10 +# Output: 1929/10/27, 2067/09/05 +# +# On the date you were born, someone who was your current age, would have +# been born on 1929/10/27. Someone born today will be your current age +# on 2067/09/05. +# +# Example 3: +# +# Input: 1967/02/14 +# Output: 1912/07/08, 2076/04/30 +# +# On the date you were born, someone who was your current age, would have +# been born on 1912/07/08. Someone born today will be your current age +# on 2076/04/30. +# +# MY NOTES: Sounds like a pretty easy date manipulation exercise: dob - delta, +# today + delta where delta = today - date. The hardest part is working out +# which Date manipulation module to use, as Perl has so many. +# + +use strict; +use warnings; +use feature 'say'; +use Getopt::Long; +#use Data::Dumper; +use Date::Simple ('date', 'today'); + +my $debug=0; +die "Usage: mirror-dates YOUR_DOB\n" unless + GetOptions( "debug"=>\$debug ) && @ARGV==1; +my $dobstr = shift @ARGV; +$dobstr =~ s|/|-|g; # Date::Simple likes YYYY-MM-DD not YYYY/MM/DD +my $dob = date($dobstr) || die "bad date: $dobstr\n"; + +my $today = today(); +$today = date("2021-09-22") if $debug; # use today=exampletoday if debugging +say "Using today = $today" if $debug; + +say "dob=$dob, today=$today" if $debug; + +my $delta = $today - $dob; +say "delta=$delta" if $debug; + +my $before = $dob - $delta; +my $after = $today + $delta; + +say "$before, $after"; diff --git a/challenge-132/duncan-c-white/perl/ch-2.pl b/challenge-132/duncan-c-white/perl/ch-2.pl new file mode 100755 index 0000000000..e38e9bb34c --- /dev/null +++ b/challenge-132/duncan-c-white/perl/ch-2.pl @@ -0,0 +1,139 @@ +#!/usr/bin/perl +# +# TASK #2 - Hash Join +# +# Write a script to implement Hash Join algorithm as suggested by wikipedia. +# +# 1. For each tuple r in the build input R +# 1.1 Add r to the in-memory hash table +# 1.2 If the size of the hash table equals the maximum in-memory size: +# 1.2.1 Scan the probe input S, and add matching join tuples to +# the output relation +# 1.2.2 Reset the hash table, and continue scanning the build input R +# 2. Do a final scan of the probe input S and add the resulting join tuples +# to the output relation +# +# Example +# +# Input: +# +# @player_ages = ( +# [20, "Alex" ], +# [28, "Joe" ], +# [38, "Mike" ], +# [18, "Alex" ], +# [25, "David" ], +# [18, "Simon" ], +# ); +# +# @player_names = ( +# ["Alex", "Stewart"], +# ["Joe", "Root" ], +# ["Mike", "Gatting"], +# ["Joe", "Blog" ], +# ["Alex", "Jones" ], +# ["Simon","Duane" ], +# ); +# +# Output: +# +# Based on index = 1 of @players_age and index = 0 of @players_name. +# +# 20, "Alex", "Stewart" +# 20, "Alex", "Jones" +# 18, "Alex", "Stewart" +# 18, "Alex", "Jones" +# 28, "Joe", "Root" +# 28, "Joe", "Blog" +# 38, "Mike", "Gatting" +# 18, "Simon", "Duane" +# +# MY NOTES: Ok, I think I understand, but I'm going to ignore the +# whole "out of memory" part as that's too complicated. +# Also, I can't see what logical order the example output is ordered by, +# as far as I can see, the described algorithm leads to the order that I +# produce - not the order the above example output shows; so I'm going to +# ignore that too. After all, in a relation, order doesn't matter, right? +# +# So for the example I build %name2ages containing: +# "Alex" => [20, 18], +# "Joe" => [28], +# "Mike" => [38], +# "David" => [25], +# "Simon" => [18]. +# Then use %name2ages while iterating over @player_names. +# +# There's also the question of how to provide the relations, +# (in this file) let's start hard-coding them as arrays of pairs as above, +# but see also ch-2a.pl which generalises them as files. +# + +use strict; +use warnings; +use feature 'say'; +use Function::Parameters; +use Getopt::Long; +use Data::Dumper; + +my $debug = 0; + +die "Usage: hash-join [-d|--debug]\n" + unless GetOptions( "debug"=>\$debug ) && @ARGV==0; + +my @player_ages = ( + [20, "Alex" ], + [28, "Joe" ], + [38, "Mike" ], + [18, "Alex" ], + [25, "David" ], + [18, "Simon" ], +); + +my @player_names = ( + ["Alex", "Stewart"], + ["Joe", "Root" ], + ["Mike", "Gatting"], + ["Joe", "Blog" ], + ["Alex", "Jones" ], + ["Simon","Duane" ], +); + +# +# my @result = hashjoin( $relation1, $fieldno1, $relation2, $fieldno2 ); +# Do the hash join of two relations $relation1 and $relation2 (each a +# reference to an array of pairs), on field no $fieldno1 in $relation1 +# with $fieldno2 from $relation2. Returns an array of pairs. +# +fun hashjoin( $relation1, $fieldno1, $relation2, $fieldno2 ) +{ + my %hash; + foreach my $ref (@$relation1) + { + my @r = @$ref; + my $aref = ($hash{$r[$fieldno1]}//=[]); + push @$aref, $r[1-$fieldno1]; + } + #die Dumper \%hash; + + my @result; + + foreach my $ref (@$relation2) + { + my @r = @$ref; + my $key = $r[$fieldno2]; + my $other = $r[1-$fieldno2]; + foreach my $val (@{$hash{$key}}) + { + push @result, [ $val, $key, $other ]; + } + } + + return @result; +} + + +my @result = hashjoin( + \@player_ages, 1, + \@player_names, 0, + ); +say join(', ',@$_) for @result; diff --git a/challenge-132/duncan-c-white/perl/ch-2a.pl b/challenge-132/duncan-c-white/perl/ch-2a.pl new file mode 100755 index 0000000000..50c09af444 --- /dev/null +++ b/challenge-132/duncan-c-white/perl/ch-2a.pl @@ -0,0 +1,150 @@ +#!/usr/bin/perl +# +# TASK #2a - Hash Join (with relations read from files) +# +# Write a script to implement Hash Join algorithm as suggested by wikipedia. +# This version reads the relations from CSV-formatted files, which contain +# the fieldnames in row 1. +# +# 1. For each tuple r in the build input R +# 1.1 Add r to the in-memory hash table +# 2. Do a final scan of the probe input S and add the resulting join tuples +# to the output relation +# +# Example +# +# Input: +# +# ages: +# age,forename +# 20,"Alex" +# 28,"Joe" +# 38,"Mike" +# 18,"Alex" +# 25,"David" +# 18,"Simon" +# +# names: +# forename,surname +# "Alex","Stewart" +# "Joe","Root" +# "Mike","Gatting" +# "Joe","Blog" +# "Alex","Jones" +# "Simon","Duane" +# +# Output: +# +# Join based on forename fields +# +# 20, "Alex", "Stewart" +# 20, "Alex", "Jones" +# 18, "Alex", "Stewart" +# 18, "Alex", "Jones" +# 28, "Joe", "Root" +# 28, "Joe", "Blog" +# 38, "Mike", "Gatting" +# 18, "Simon", "Duane" +# +# MY NOTES: Ok, I think I understand, but I'm going to ignore the +# whole "out of memory" part as that's too complicated. +# Also, I can't see what logical order the example output is ordered by, +# as far as I can see, the described algorithm leads to the order that I +# produce - not the order the above example output shows; so I'm going to +# ignore that too. After all, in a relation, order doesn't matter, right? +# +# So for the example I build %name2ages containing: +# "Alex" => [20, 18], +# "Joe" => [28], +# "Mike" => [38], +# "David" => [25], +# "Simon" => [18]. +# Then use %name2ages while iterating over @player_names. +# + +use strict; +use warnings; +use feature 'say'; +use Function::Parameters; +use Getopt::Long; +use List::Util qw(first); +use Data::Dumper; +use Text::CSV; + +my $debug = 0; + +die "Usage: hash-join [-d|--debug] relation1 fieldname1 relation2 [fieldname2]\n" + unless GetOptions( "debug"=>\$debug ) && (@ARGV==3 || @ARGV==4); +my( $relname1, $field1, $relname2, $field2 ) = @ARGV; +$field2 //= $field1; # reuse same fieldname if fieldname2 omitted + + +# +# my @relation = read_relation( $relname ); +# Read a relation from file $relname, and return the array of rows. +# +fun read_relation( $relname ) +{ + my $csv = Text::CSV->new(); + open( my $fh, '<', $relname ) || die "can't open $relname\n"; + my @rows; + while( my $row = $csv->getline ($fh) ) + { + #die Dumper \$row; + push @rows, $row; + } + close $fh; + return @rows; +} + + +# +# my @result = hashjoin( $relation1, $fieldno1, $relation2, $fieldno2 ); +# Do the hash join of two relations $relation1 and $relation2 (each a +# reference to an array of pairs), on field no $fieldno1 in $relation1 +# with $fieldno2 from $relation2. Returns an array of pairs. +# +fun hashjoin( $relation1, $fieldno1, $relation2, $fieldno2 ) +{ + my %hash; + foreach my $ref (@$relation1) + { + my @r = @$ref; + my $aref = ($hash{$r[$fieldno1]}//=[]); + push @$aref, $r[1-$fieldno1]; + } + #die Dumper \%hash; + + my @result; + + foreach my $ref (@$relation2) + { + my @r = @$ref; + my $key = $r[$fieldno2]; + my $other = $r[1-$fieldno2]; + foreach my $val (@{$hash{$key}}) + { + push @result, [ $val, $key, $other ]; + } + } + + return @result; +} + + +my @player_ages = read_relation( $relname1 ); +#die Dumper \@player_ages; +my @age_fields = @{shift @player_ages}; +my $fieldno1 = first { $age_fields[$_] eq $field1 } 0..$#age_fields; +say "fieldno1($field1)=$fieldno1" if $debug; + +my @player_names = read_relation( $relname2 ); +my @name_fields = @{shift @player_names}; +my $fieldno2 = first { $name_fields[$_] eq $field2 } 0..$#name_fields; +say "fieldno2($field2)=$fieldno2" if $debug; + +my @result = hashjoin( + \@player_ages, $fieldno1, + \@player_names, $fieldno2, + ); +say join(', ',@$_) for @result; diff --git a/challenge-132/duncan-c-white/perl/names b/challenge-132/duncan-c-white/perl/names new file mode 100644 index 0000000000..2c2d3c98f4 --- /dev/null +++ b/challenge-132/duncan-c-white/perl/names @@ -0,0 +1,7 @@ +forename,surname +"Alex","Stewart" +"Joe","Root" +"Mike","Gatting" +"Joe","Blog" +"Alex","Jones" +"Simon","Duane" -- cgit From bdd9c13f465fb2170e1f0c2c2f86b6f823b0cfe7 Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Mon, 4 Oct 2021 00:39:35 +0100 Subject: - Added blogs by Abigail. --- stats/pwc-current.json | 388 +-- stats/pwc-language-breakdown-summary.json | 56 +- stats/pwc-language-breakdown.json | 5184 ++++++++++++++--------------- stats/pwc-leaders.json | 714 ++-- stats/pwc-summary-1-30.json | 34 +- stats/pwc-summary-121-150.json | 108 +- stats/pwc-summary-151-180.json | 34 +- stats/pwc-summary-181-210.json | 48 +- stats/pwc-summary-211-240.json | 44 +- stats/pwc-summary-241-270.json | 52 +- stats/pwc-summary-31-60.json | 46 +- stats/pwc-summary-61-90.json | 32 +- stats/pwc-summary-91-120.json | 108 +- stats/pwc-summary.json | 56 +- 14 files changed, 3454 insertions(+), 3450 deletions(-) diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 4e714dc264..013d41edca 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,167 +1,32 @@ { - "chart" : { - "type" : "column" - }, - "title" : { - "text" : "The Weekly Challenge - 132" - }, - "series" : [ - { - "data" : [ - { - "drilldown" : "Abigail", - "y" : 2, - "name" : "Abigail" - }, - { - "y" : 1, - "name" : "Adam Russell", - "drilldown" : "Adam Russell" - }, - { - "y" : 3, - "name" : "Arne Sommer", - "drilldown" : "Arne Sommer" - }, - { - "name" : "Athanasius", - "y" : 2, - "drilldown" : "Athanasius" - }, - { - "name" : "Ben Davies", - "y" : 2, - "drilldown" : "Ben Davies" - }, - { - "drilldown" : "Cheok-Yin Fung", - "y" : 1, - "name" : "Cheok-Yin Fung" - }, - { - "drilldown" : "Dave Jacoby", - "y" : 3, - "name" : "Dave Jacoby" - }, - { - "name" : "E. Choroba", - "y" : 2, - "drilldown" : "E. Choroba" - }, - { - "name" : "Flavio Poletti", - "y" : 6, - "drilldown" : "Flavio Poletti" - }, - { - "name" : "James Raspass", - "y" : 1, - "drilldown" : "James Raspass" - }, - { - "drilldown" : "James Smith", - "y" : 3, - "name" : "James Smith" - }, - { - "drilldown" : "Jan Krnavek", - "name" : "Jan Krnavek", - "y" : 1 - }, - { - "drilldown" : "Jorg Sommrey", - "y" : 2, - "name" : "Jorg Sommrey" - }, - { - "drilldown" : "Laurent Rosenfeld", - "y" : 5, - "name" : "Laurent Rosenfeld" - }, - { - "drilldown" : "Lubos Kolouch", - "y" : 1, - "name" : "Lubos Kolouch" - }, - { - "y" : 4, - "name" : "Luca Ferrari", - "drilldown" : "Luca Ferrari" - }, - { - "drilldown" : "Mark Anderson", - "name" : "Mark Anderson", - "y" : 2 - }, - { - "drilldown" : "Matthew Neleigh", - "name" : "Matthew Neleigh", - "y" : 2 - }, - { - "drilldown" : "Niels van Dijke", - "y" : 2, - "name" : "Niels van Dijke" - }, - { - "name" : "Olivier Delouya", - "y" : 2, - "drilldown" : "Olivier Delouya" - }, - { - "name" : "Roger Bell_West", - "y" : 5, - "drilldown" : "Roger Bell_West" - }, - { - "name" : "Simon Proctor", - "y" : 1, - "drilldown" : "Simon Proctor" - }, - { - "drilldown" : "Ulrich Rieke", - "y" : 3, - "name" : "Ulrich Rieke" - }, - { - "drilldown" : "W. Luis Mochan", - "y" : 3, - "name" : "W. Luis Mochan" - }, - { - "drilldown" : "Wanderdoc", - "y" : 2, - "name" : "Wanderdoc" - } - ], - "colorByPoint" : 1, - "name" : "The Weekly Challenge - 132" - } - ], - "xAxis" : { - "type" : "category" + "subtitle" : { + "text" : "[Champions: 25] Last updated at 2021-10-03 23:38:28 GMT" }, "drilldown" : { "series" : [ { - "name" : "Abigail", - "id" : "Abigail", "data" : [ [ "Perl", 2 + ], + [ + "Blog", + 2 ] - ] + ], + "id" : "Abigail", + "name" : "Abigail" }, { - "id" : "Adam Russell", + "name" : "Adam Russell", "data" : [ [ "Perl", 1 ] ], - "name" : "Adam Russell" + "id" : "Adam Russell" }, { "name" : "Arne Sommer", @@ -179,7 +44,6 @@ }, { "name" : "Athanasius", - "id" : "Athanasius", "data" : [ [ "Perl", @@ -189,17 +53,18 @@ "Raku", 1 ] - ] + ], + "id" : "Athanasius" }, { "name" : "Ben Davies", - "id" : "Ben Davies", "data" : [ [ "Raku", 2 ] - ] + ], + "id" : "Ben Davies" }, { "name" : "Cheok-Yin Fung", @@ -227,16 +92,16 @@ }, { "name" : "E. Choroba", + "id" : "E. Choroba", "data" : [ [ "Perl", 2 ] - ], - "id" : "E. Choroba" + ] }, { - "id" : "Flavio Poletti", + "name" : "Flavio Poletti", "data" : [ [ "Perl", @@ -251,20 +116,20 @@ 2 ] ], - "name" : "Flavio Poletti" + "id" : "Flavio Poletti" }, { - "name" : "James Raspass", "data" : [ [ "Raku", 1 ] ], - "id" : "James Raspass" + "id" : "James Raspass", + "name" : "James Raspass" }, { - "id" : "James Smith", + "name" : "James Smith", "data" : [ [ "Perl", @@ -275,31 +140,29 @@ 1 ] ], - "name" : "James Smith" + "id" : "James Smith" }, { "name" : "Jan Krnavek", - "id" : "Jan Krnavek", "data" : [ [ "Raku", 1 ] - ] + ], + "id" : "Jan Krnavek" }, { "name" : "Jorg Sommrey", + "id" : "Jorg Sommrey", "data" : [ [ "Perl", 2 ] - ], - "id" : "Jorg Sommrey" + ] }, { - "name" : "Laurent Rosenfeld", - "id" : "Laurent Rosenfeld", "data" : [ [ "Perl", @@ -313,21 +176,22 @@ "Blog", 1 ] - ] + ], + "id" : "Laurent Rosenfeld", + "name" : "Laurent Rosenfeld" }, { + "id" : "Lubos Kolouch", "data" : [ [ "Perl", 1 ] ], - "id" : "Lubos Kolouch", "name" : "Lubos Kolouch" }, { "name" : "Luca Ferrari", - "id" : "Luca Ferrari", "data" : [ [ "Raku", @@ -337,17 +201,18 @@ "Blog", 2 ] - ] + ], + "id" : "Luca Ferrari" }, { "name" : "Mark Anderson", - "id" : "Mark Anderson", "data" : [ [ "Raku", 2 ] - ] + ], + "id" : "Mark Anderson" }, { "name" : "Matthew Neleigh", @@ -360,26 +225,28 @@ ] }, { - "id" : "Niels van Dijke", + "name" : "Niels van Dijke", "data" : [ [ "Perl", 2 ] ], - "name" : "Niels van Dijke" + "id" : "Niels van Dijke" }, { - "name" : "Olivier Delouya", "id" : "Olivier Delouya", "data" : [ [ "Perl", 2 ] - ] + ], + "name" : "Olivier Delouya" }, { + "name" : "Roger Bell_West", + "id" : "Roger Bell_West", "data" : [ [ "Perl", @@ -393,9 +260,7 @@ "Blog", 1 ] - ], - "id" : "Roger Bell_West", - "name" : "Roger Bell_West" + ] }, { "name" : "Simon Proctor", @@ -408,7 +273,7 @@ "id" : "Simon Proctor" }, { - "id" : "Ulrich Rieke", + "name" : "Ulrich Rieke", "data" : [ [ "Perl", @@ -419,9 +284,11 @@ 2 ] ], - "name" : "Ulrich Rieke" + "id" : "Ulrich Rieke" }, { + "name" : "W. Luis Mochan", + "id" : "W. Luis Mochan", "data" : [ [ "Perl", @@ -431,45 +298,182 @@ "Blog", 1 ] - ], - "id" : "W. Luis Mochan", - "name" : "W. Luis Mochan" + ] }, { - "id" : "Wanderdoc", "data" : [ [ "Perl", 2 ] ], + "id" : "Wanderdoc", "name" : "Wanderdoc" } ] }, - "subtitle" : { - "text" : "[Champions: 25] Last updated at 2021-10-03 23:33:26 GMT" + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } }, "tooltip" : { + "followPointer" : 1, "pointFormat" : "{point.name}: {point.y:f}
", - "headerFormat" : "{series.name}
", - "followPointer" : 1 + "headerFormat" : "{series.name}
" }, "plotOptions" : { "series" : { - "borderWidth" : 0, "dataLabels" : { "enabled" : 1, "format" : "{point.y}" - } + }, + "borderWidth" : 0 } }, "legend" : { "enabled" : 0 }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" + "title" : { + "text" : "The Weekly Challenge - 132" + }, + "series" : [ + { + "name" : "The Weekly Challenge - 132", + "data" : [ + { + "y" : 4, + "name" : "Abigail", + "drilldown" : "Abigail" + }, + { + "drilldown" : "Adam Russell", + "y" : 1, + "name" : "Adam Russell" + }, + { + "name" : "Arne Sommer", + "y" : 3, + "drilldown" : "Arne Sommer" + }, + { + "drilldown" : "Athanasius", + "y" : 2, + "name" : "Athanasius" + }, + { + "name" : "Ben Davies", + "y" : 2, + "drilldown" : "Ben Davies" + }, + { + "name" : "Cheok-Yin Fung", + "y" : 1, + "drilldown" : "Cheok-Yin Fung" + }, + { + "name" : "Dave Jacoby", + "y" : 3, + "drilldown" : "Dave Jacoby" + }, + { + "name" : "E. Choroba", + "y" : 2, + "drilldown" : "E. Choroba" + }, + { + "drilldown" : "Flavio Poletti", + "name" : "Flavio Poletti", + "y" : 6 + }, + { + "name" : "James Raspass", + "y" : 1, + "drilldown" : "James Raspass" + }, + { + "drilldown" : "James Smith", + "name" : "James Smith", + "y" : 3 + }, + { + "y" : 1, + "name" : "Jan Krnavek", + "drilldown" : "Jan Krnavek" + }, + { + "name" : "Jorg Sommrey", + "y" : 2, + "drilldown" : "Jorg Sommrey" + }, + { + "y" : 5, + "name" : "Laurent Rosenfeld", + "drilldown" : "Laurent Rosenfeld" + }, + { + "drilldown" : "Lubos Kolouch", + "y" : 1, + "name" : "Lubos Kolouch" + }, + { + "y" : 4, + "name" : "Luca Ferrari", + "drilldown" : "Luca Ferrari" + }, + { + "drilldown" : "Mark Anderson", + "y" : 2, + "name" : "Mark Anderson" + }, + { + "drilldown" : "Matthew Neleigh", + "name" : "Matthew Neleigh", + "y" : 2 + }, + { + "y" : 2, + "name" : "Niels van Dijke", + "drilldown" : "Niels van Dijke" + }, + { + "drilldown" : "Olivier Delouya", + "name" : "Olivier Delouya", + "y" : 2 + }, + { + "name" : "Roger Bell_West", + "y" : 5, + "drilldown" : "Roger Bell_West" + }, + { + "y" : 1, + "name" : "Simon Proctor", + "drilldown" : "Simon Proctor" + }, + { + "drilldown" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "y" : 3 + }, + { + "drilldown" : "W. Luis Mochan", + "y" : 3, + "name" : "W. Luis Mochan" + }, + { + "y" : 2, + "name" : "Wanderdoc", + "drilldown" : "Wanderdoc" + } + ], + "colorByPoint" : 1 } + ], + "chart" : { + "type" : "column" + }, + "xAxis" : { + "type" : "category" } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index dc4602132b..3efdb7ed44 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,19 +1,23 @@ { - "title" : { - "text" : "The Weekly Challenge Contributions [2019 - 2021]" - }, - "chart" : { - "type" : "column" - }, - "subtitle" : { - "text" : "Last updated at 2021-10-03 23:33:26 GMT" - }, "series" : [ { + "name" : "Contributions", + "dataLabels" : { + "enabled" : "true", + "align" : "right", + "rotation" : -90, + "format" : "{point.y:.0f}", + "y" : 10, + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + }, + "color" : "#FFFFFF" + }, "data" : [ [ "Blog", - 1907 + 1909 ], [ "Perl", @@ -23,31 +27,27 @@ "Raku", 3862 ] - ], - "name" : "Contributions", - "dataLabels" : { - "y" : 10, - "align" : "right", - "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" - }, - "format" : "{point.y:.0f}", - "color" : "#FFFFFF", - "rotation" : -90, - "enabled" : "true" - } + ] } ], + "title" : { + "text" : "The Weekly Challenge Contributions [2019 - 2021]" + }, + "chart" : { + "type" : "column" + }, "xAxis" : { "type" : "category", "labels" : { "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" } } }, + "legend" : { + "enabled" : "false" + }, "yAxis" : { "title" : { "text" : null @@ -57,7 +57,7 @@ "tooltip" : { "pointFormat" : "{point.y:.0f}" }, - "legend" : { - "enabled" : "false" + "subtitle" : { + "text" : "Last updated at 2021-10-03 23:38:28 GMT" } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index fbc303a70a..6abd4ac35a 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,2387 +1,10 @@ { - "drilldown" : { - "series" : [ - { - "name" : "001", - "id" : "001", - "data" : [ - [ - "Perl", - 103 - ], - [ - "Raku", - 47 - ], - [ - "Blog", - 11 - ] - ] - }, - { - "name" : "002", - "id" : "002", - "data" : [ - [ - "Perl", - 79 - ], - [ - "Raku", - 36 - ], - [ - "Blog", - 10 - ] - ] - }, - { - "id" : "003", - "data" : [ - [ - "Perl", - 42 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 9 - ] - ], - "name" : "003" - }, - { - "id" : "004", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 10 - ] - ], - "name" : "004" - }, - { - "name" : "005", - "data" : [ - [ - "Perl", - 40 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 12 - ] - ], - "id" : "005" - }, - { - "id" : "006", - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 18 - ], - [ - "Blog", - 7 - ] - ], - "name" : "006" - }, - { - "name" : "007", - "data" : [ - [ - "Perl", - 31 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 10 - ] - ], - "id" : "007" - }, - { - "name" : "008", - "data" : [ - [ - "Perl", - 44 - ], - [ - "Raku", - 22 - ], - [ - "Blog", - 12 - ] - ], - "id" : "008" - }, - { - "id" : "009", - "data" : [ - [ - "Perl", - 42 - ], - [ - "Raku", - 21 - ], - [ - "Blog", - 13 - ] - ], - "name" : "009" - }, - { - "name" : "010", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 19 - ], - [ - "Blog", - 11 - ] - ], - "id" : "010" - }, - { - "name" : "011", - "id" : "011", - "data" : [ - [ - "Perl", - 47 - ], - [ - "Raku", - 28 - ], - [ - "Blog", - 10 - ] - ] - }, - { - "name" : "012", - "id" : "012", - "data" : [ - [ - "Perl", - 48 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 11 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 47 - ], - [ - "Raku", - 25 - ], - [ - "Blog", - 13 - ] - ], - "id" : "013", - "name" : "013" - }, - { - "data" : [ - [ - "Perl", - 55 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 15 - ] - ], - "id" : "014", - "name" : "014" - }, - { - "name" : "015", - "id" : "015", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 28 - ], - [ - "Blog", - 15 - ] - ] - }, - { - "name" : "016", - "data" : [ - [ - "Perl", - 36 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 12 - ] - ], - "id" : "016" - }, - { - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 27 - ], - [ - "Blog", - 12 - ] - ], - "id" : "017", - "name" : "017" - }, - { - "name" : "018", - "id" : "018", - "data" : [ - [ - "Perl", - 36 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 14 - ] - ] - }, - { - "id" : "019", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 13 - ] - ], - "name" : "019" - }, - { - "name" : "020", - "id" : "020", - "data" : [ - [ - "Perl", - 51 - ], - [ - "Raku", - 37 - ], - [ - "Blog", - 13 - ] - ] - }, - { - "name" : "021", - "data" : [ - [ - "Perl", - 38 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 10 - ] - ], - "id" : "021" - }, - { - "id" : "022", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 10 - ] - ], - "name" : "022" - }, - { - "name" : "023", - "id" : "023", - "data" : [ - [ - "Perl", - 53 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 12 - ] - ] - }, - { - "name" : "024", - "data" : [ - [ - "Perl", - 38 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 11 - ] - ], - "id" : "024" - }, - { - "data" : [ - [ - "Perl", - 28 - ], - [ - "Raku", - 19 - ], - [ - "Blog", - 12 - ] - ], - "id" : "025", - "name" : "025" - }, - { - "name" : "026", - "id" : "026", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 29 - ], - [ - "Blog", - 10 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 29 - ], - [ - "Raku", - 22 - ], - [ - "Blog", - 9 - ] - ], - "id" : "027", - "name" : "027" - }, - { - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 9 - ] - ], - "id" : "028", - "name" : "028" - }, - { - "name" : "029", - "id" : "029", - "data" : [ - [ - "Perl", - 40 - ], - [ - "Raku", - 27 - ], - [ - "Blog", - 12 - ] - ] - }, - { - "id" : "030", - "data" : [ - [ - "Perl", - 74 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 10 - ] - ], - "name" : "030" - }, - { - "id" : "031", - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 9 - ] - ], - "name" : "031" - }, - { - "name" : "032", - "id" : "032", - "data" : [ - [ - "Perl", - 57 - ], - [ - "Raku", - 27 - ], - [ - "Blog", - 10 - ] - ] - }, - { - "name" : "033", - "id" : "033", - "data" : [ - [ - "Perl", - 62 - ], - [ - "Raku", - 38 - ], - [ - "Blog", - 10 - ] - ] - }, - { - "name" : "034", - "id" : "034", - "data" : [ - [ - "Perl", - 30 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 11 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 22 - ], - [ - "Blog", - 9 - ] - ], - "id" : "035", - "name" : "035" - }, - { - "name" : "036", - "id" : "036", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 22 - ], - [ - "Blog", - 11 - ] - ] - }, - { - "name" : "037", - "id" : "037", - "data" : [ - [ - "Perl", - 34 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 9 - ] - ] - }, - { - "name" : "038", - "id" : "038", - "data" : [ - [ - "Perl", - 32 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 12 - ] - ] - }, - { - "name" : "039", - "data" : [ - [ - "Perl", - 29 - ], - [ - "Raku", - 21 - ], - [ - "Blog", - 12 - ] - ], - "id" : "039" - }, - { - "id" : "040", - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 10 - ] - ], - "name" : "040" - }, - { - "name" : "041", - "id" : "041", - "data" : [ - [ - "Perl", - 37 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 9 - ] - ] - }, - { - "name" : "042", - "id" : "042", - "data" : [ - [ - "Perl", - 47 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 11 - ] - ] - }, - { - "name" : "043", - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 11 - ] - ], - "id" : "043" - }, - { - "data" : [ - [ - "Perl", - 41 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 11 - ] - ], - "id" : "044", - "name" : "044" - }, - { - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 35 - ], - [ - "Blog", - 11 - ] - ], - "id" : "045", - "name" : "045" - }, - { - "data" : [ - [ - "Perl", - 44 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 10 - ] - ], - "id" : "046", - "name" : "046" - }, - { - "name" : "047", - "id" : "047", - "data" : [ - [ - "Perl", - 43 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 10 - ] - ] - }, - { - "id" : "048", - "data" : [ - [ - "Perl", - 59 - ], - [ - "Raku", - 37 - ], - [ - "Blog", - 12 - ] - ], - "name" : "048" - }, - { - "name" : "049", - "id" : "049", - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 27 - ], - [ - "Blog", - 12 - ] - ] - }, - { - "id" : "050", - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 36 - ], - [ - "Blog", - 12 - ] - ], - "name" : "050" - }, - { - "id" : "051", - "data" : [ - [ - "Perl", - 46 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 11 - ] - ], - "name" : "051" - }, - { - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 14 - ] - ], - "id" : "052", - "name" : "052" - }, - { - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 41 - ], - [ - "Blog", - 15 - ] - ], - "id" : "053", - "name" : "053" - }, - { - "name" : "054", - "id" : "054", - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 40 - ], - [ - "Blog", - 18 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 41 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 14 - ] - ], - "id" : "055", - "name" : "055" - }, - { - "data" : [ - [ - "Perl", - 47 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 16 - ] - ], - "id" : "056", - "name" : "056" - }, - { - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 15 - ] - ], - "id" : "057", - "name" : "057" - }, - { - "id" : "058", - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 13 - ] - ], - "name" : "058" - }, - { - "id" : "059", - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 16 - ] - ], - "name" : "059" - }, - { - "id" : "060", - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 16 - ] - ], - "name" : "060" - }, - { - "data" : [ - [ - "Perl", - 37 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 14 - ] - ], - "id" : "061", - "name" : "061" - }, - { - "name" : "062", - "data" : [ - [ - "Perl", - 28 - ], - [ - "Raku", - 19 - ], - [ - "Blog", - 11 - ] - ], - "id" : "062" - }, - { - "name" : "063", - "id" : "063", - "data" : [ - [ - "Perl", - 42 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 13 - ] - ] - }, - { - "id" : "064", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 29 - ], - [ - "Blog", - 16 - ] - ], - "name" : "064" - }, - { - "name" : "065", - "id" : "065", - "data" : [ - [ - "Perl", - 32 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 15 - ] - ] - }, - { - "name" : "066", - "id" : "066", - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 14 - ] - ] - }, - { - "id" : "067", - "data" : [ - [ - "Perl", - 38 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 18 - ] - ], - "name" : "067" - }, - { - "name" : "068", - "id" : "068", - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 29 - ], - [ - "Blog", - 13 - ] - ] - }, - { - "name" : "069", - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 28 - ], - [ - "Blog", - 16 - ] - ], - "id" : "069" - }, - { - "id" : "070", - "data" : [ - [ - "Perl", - 42 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 17 - ] - ], - "name" : "070" - }, - { - "name" : "071", - "data" : [ - [ - "Perl", - 31 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 15 - ] - ], - "id" : "071" - }, - { - "data" : [ - [ - "Perl", - 51 - ], - [ - "Raku", - 42 - ], - [ - "Blog", - 19 - ] - ], - "id" : "072", - "name" : "072" - }, - { - "name" : "073", - "id" : "073", - "data" : [ - [ - "Perl", - 53 - ], - [ - "Raku", - 40 - ], - [ - "Blog", - 17 - ] - ] - }, - { - "name" : "074", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 39 - ], - [ - "Blog", - 20 - ] - ], - "id" : "074" - }, - { - "name" : "075", - "id" : "075", - "data" : [ - [ - "Perl", - 57 - ], - [ - "Raku", - 38 - ], - [ - "Blog", - 20 - ] - ] - }, - { - "name" : "076", - "id" : "076", - "data" : [ - [ - "Perl", - 51 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 16 - ] - ] - }, - { - "name" : "077", - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 14 - ] - ], - "id" : "077" - }, - { - "name" : "078", - "data" : [ - [ - "Perl", - 68 - ], - [ - "Raku", - 41 - ], - [ - "Blog", - 18 - ] - ], - "id" : "078" - }, - { - "id" : "079", - "data" : [ - [ - "Perl", - 68 - ], - [ -