From 7f736f61354f3fa72e8a87a124caa194281c2f2a Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Mon, 15 Jun 2020 00:09:09 +0100 Subject: - Added solutions by Colin Crain. --- challenge-064/colin-crain/perl/ch-1.pl | 172 +++++++ challenge-064/colin-crain/perl/ch-2.pl | 89 ++++ challenge-064/colin-crain/raku/ch-1.p6 | 237 ++++++++++ challenge-064/colin-crain/raku/ch-2.p6 | 83 ++++ stats/pwc-current.json | 178 +++---- stats/pwc-language-breakdown-summary.json | 74 +-- stats/pwc-language-breakdown.json | 500 ++++++++++---------- stats/pwc-leaders.json | 740 +++++++++++++++--------------- stats/pwc-summary-1-30.json | 116 ++--- stats/pwc-summary-121-150.json | 20 +- stats/pwc-summary-151-180.json | 42 +- stats/pwc-summary-31-60.json | 48 +- stats/pwc-summary-61-90.json | 30 +- stats/pwc-summary-91-120.json | 108 ++--- stats/pwc-summary.json | 392 ++++++++-------- 15 files changed, 1709 insertions(+), 1120 deletions(-) create mode 100644 challenge-064/colin-crain/perl/ch-1.pl create mode 100644 challenge-064/colin-crain/perl/ch-2.pl create mode 100644 challenge-064/colin-crain/raku/ch-1.p6 create mode 100644 challenge-064/colin-crain/raku/ch-2.p6 diff --git a/challenge-064/colin-crain/perl/ch-1.pl b/challenge-064/colin-crain/perl/ch-1.pl new file mode 100644 index 0000000000..ea7ba01276 --- /dev/null +++ b/challenge-064/colin-crain/perl/ch-1.pl @@ -0,0 +1,172 @@ +#! /opt/local/bin/perl +# +# six_blocks_way.pl +# +# TASK #1 › MINIMUM SUM PATH +# +# Submitted by: Mohammad S Anwar +# Remelted and Refined by: RYAN THOMPSON +# +# Given an m × n matrix with non-negative integers, write a +# script to find a path from top left to bottom right which +# minimizes the sum of all numbers along its path. You can only +# move either down or right at any point in time. +# +# EXAMPLE +# +# Input: +# +# [ 1 2 3 ] +# [ 4 5 6 ] +# [ 7 8 9 ] +# +# The minimum sum path looks like this: +# +# 1→2→3 +# ↓ +# 6 +# ↓ +# 9 +# +# Thus, your script could output: 21 ( 1 → 2 → 3 → 6 → 9 ) +# +# METHOD +# +# What we have here is a matrix of values, located at the points +# of a multidimensional array. We are connecting adjacent points +# with potential pathways, but restricting travel on those +# pathways to only the left-to-right and top-to-bottom +# directions. We need a method to follow routes through this +# grid from point to point, tallying the values as we go. From +# this we can determine the correct answer. +# +# The structure we have made is known as a Directed Acyclic +# Graph, and is useful to model many things with a series of +# choices towards a goal. We will start by looking at the +# underlying structure of a simple 3×4 array, with the points +# labeled, rather than the values stored there: +# +# 0,0 0,1 0,2 0,3 +# +# 1,0 1,1 1,2 1,3 +# +# 2,0 2,1 2,2 2,3 +# +# rotating the whole thing clockwise 45° makes the underlying graph easier +# to see. +# +# (0,0) <-- START +# ⬋ ⬊ +# (1,0) (0,1) +# ⬋ ⬊ ⬋ ⬊ +# (2,0) (1,1) (0,2) +# ⬊ ⬋ ⬊ ⬋ ⬊ +# (2,1) (1,2) (0,3) +# ⬊ ⬋ ⬊ ⬋ +# (2,2) (1,3) +# ⬊ ⬋ +# (2,3) <-- END +# +# It’s like a tree that links back into itself, and we progress +# from top to bottom, traveling inexorably downward, as in a +# pachinko machine with only one pocket. There’s a juicy +# metaphor in there somewhere. In any case as can easily be seen +# there are many ways to proceed, but if we remain bound to the +# restrictions we will always end up at the same endpoint. +# +# When situated at any given point, on the other hand, we are +# only allowed at maximum two choices in direction. If we build +# a recursive function that will follow each open pathway +# available at the current node, by the time we get to the +# endpoint we will have logged every possible route. Then we can +# take those routes, as lists of points, and do a lookup to the +# original values at each point to do the sums. The smallest of +# these is the solution. Because we are asked to find “a path” +# with the minimal sum, in the case of multiple equal answers +# any one will do. +# +# Walking down the script we have an input section, where we +# also determine the endpoint. We then find our routes, using a +# find_node() routine similar to that in the Raku in logic, but +# in this case bifurcating into two independent forks for +# downward pointing edges and rightward. +# +# 2020 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + +use warnings; +use strict; +use feature ":5.26"; + +## ## ## ## ## MAIN: + +my $graph = [ [ 1, 16, 12, 43, 48, 19 ], + [ 13, 7, 9, 16, 26, 8 ], + [ 23, 18, 6, 11, 15, 17 ], + [ 22, 33, 28, 5, 36, 32 ], + [ 38, 43, 9, 46, 3, 42 ], + [ 56, 4, 66, 76, 25, 2 ], + [ 27, 10, 58, 14, 68, 52 ] ]; + +my $endpoint = [$graph->@* - 1, $graph->[0]->@* - 1]; + +## determine the paths through the grid +my @paths; +my $startpoint = [0,0]; +my $path = [$startpoint]; +find_nodes( $path, $startpoint ); + +## sum totals to find the smallest +my $minsum = "+Inf"; +my $minpath; +for $path (@paths) { + my $sum = 0; + $sum += $graph->[@$_[0]][@$_[1]] for @$path; + if ($sum < $minsum) { + $minsum = $sum; + $minpath = $path; + } +} + +## output +say "minimum sum path:"; +print join ' -> ', map { $graph->[@$_[0]][@$_[1]] } @$minpath; +say "\nsum is $minsum"; + +## ## ## ## ## SUBS: + +sub find_nodes { + my ( $path, $point ) = @_; + if ( $point->[0] == $endpoint->[0] && + $point->[1] == $endpoint->[1] ) { + push @paths, $path; + return; + } + unless ($point->[0] + 1 > $endpoint->[0]) { + my $next_point = [$point->[0] + 1, $point->[1]]; + my $new_path = [$path->@*, $next_point]; + find_nodes( $new_path, $next_point) + } + unless ($point->[1] + 1 > $endpoint->[1]) { + my $next_point = [$point->[0], $point->[1] + 1]; + my $new_path = [$path->@*, $next_point]; + find_nodes( $new_path, $next_point) + } +} +## refactoring rejected for clarity: (works fine, though) +# +# sub find_nodes { +# my ( $path, $point ) = @_; +# if ( $point->[0] == $endpoint->[0] && +# $point->[1] == $endpoint->[1] ) { +# push @paths, $path; +# return; +# } +# for ([$point->[0] + 1, $point->[1]], [$point->[0], $point->[1] + 1]) { +# next if ($_->[0] > $endpoint->[0] || $_->[1] > $endpoint->[1]); +# my $new_path = [$path->@*, $_]; +# find_nodes( $new_path, $_) +# } +# } diff --git a/challenge-064/colin-crain/perl/ch-2.pl b/challenge-064/colin-crain/perl/ch-2.pl new file mode 100644 index 0000000000..833449a5ac --- /dev/null +++ b/challenge-064/colin-crain/perl/ch-2.pl @@ -0,0 +1,89 @@ +#! /opt/local/bin/perl +# +# c-c-combo-breaker!.pl +# +# TASK #2 › WORD BREAK +# +# Submitted by: Mohammad S Anwar +# +# You are given a string $S and an array of words @W. +# +# Write a script to find out if $S can be split into +# sequence of one or more words as in the given @W. +# +# Print the all the words if found otherwise print 0. +# +# EXAMPLE 1: +# +# Input: +# +# $S = "perlweeklychallenge" +# @W = ("weekly", "challenge", "perl") +# +# Output: +# +# "perl", "weekly", "challenge" +# EXAMPLE 2: +# +# Input: +# +# $S = "perlandraku" +# @W = ("python", "ruby", "haskell") +# +# Output: +# +# 0 as none matching word found. + +# METHOD +# +# I have been called… things… for my love of regular +# expressions. That it wasn’t natural. Suggestions that +# there was something… off maybe, somewhere deep inside me. +# Not to discount the possibility that those people were on +# to something, I have persisted in the face of the critics. +# Refusing to be shamed, I announce it to the world. It has +# always been perhaps my favorite feature of the language, +# which is no small praise in a language with so many nice +# thing to say about it. +# +# One cannot overstate the immense power contained in the +# DSL that is Perl Regular Expressions. The added features +# of the Raku RE engine only serve to augment that power, +# and every time I have an opportunity to learn about +# something new they’ve come up with I find myself giggling +# with glee. Oh you can do that now? Sweet… Larry’s vision +# of RE really knocked it out of the park when Perl grew to +# rule the web, and the PCRE library spawned from that +# effort still holds a very promenant position today. With +# Raku, they have in a sense applied a metaoperator to the +# the very idea of regexes, expanding the initial DSL into a +# complete object ecosystem known as Grammers which we can +# in turn use to write new DSLs.* It does take a little +# getting used to coming from pure Perl, but it well worth +# the effort. +# +# This challenge, as I understand it, seems to me to be a +# straightforward application of regular expressions. +# +# --------------- +# * Andrew Shitov Creating a Complier With Raku +# https://andrewshitov.com/creating-a-compiler-with-raku/ +# +# +# 2020 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + +use warnings; +use strict; +use feature ":5.26"; + +## ## ## ## ## MAIN: + +my ($string, @words) = @ARGV; + +my $group = join '|', @words; +my @matched = $string =~ m/$group/g; + +say @matched ? "@matched" : 0; diff --git a/challenge-064/colin-crain/raku/ch-1.p6 b/challenge-064/colin-crain/raku/ch-1.p6 new file mode 100644 index 0000000000..1c990d91bb --- /dev/null +++ b/challenge-064/colin-crain/raku/ch-1.p6 @@ -0,0 +1,237 @@ +#!/usr/bin/env perl6 +# +# +# six_blocks_away.raku +# +# TASK #1 › MINIMUM SUM PATH +# +# Submitted by: Mohammad S Anwar +# Remelted and Refined by: RYAN THOMPSON +# +# Given an m × n matrix with non-negative integers, write a +# script to find a path from top left to bottom right which +# minimizes the sum of all numbers along its path. You can only +# move either down or right at any point in time. +# +# EXAMPLE +# +# Input: +# +# [ 1 2 3 ] +# [ 4 5 6 ] +# [ 7 8 9 ] +# +# The minimum sum path looks like this: +# +# 1→2→3 +# ↓ +# 6 +# ↓ +# 9 +# +# Thus, your script could output: 21 ( 1 → 2 → 3 → 6 → 9 ) +# +# METHOD +# +# What we have here is a matrix of values, located at the points +# of a multidimensional array. We are connecting adjacent points +# with potential pathways, but restricting travel on those +# pathways to only the left-to-right and top-to-bottom +# directions. We need a method to follow routes through this +# grid from point to point, tallying the values as we go. From +# this we can determine the correct answer. +# +# The structure we have made is known as a Directed Acyclic +# Graph, and is useful to model many things with a series of +# choices towards a goal. We will start by looking at the +# underlying structure of a simple 3×4 array, with the points +# labeled, rather than the values stored there: +# +# 0,0 0,1 0,2 0,3 +# +# 1,0 1,1 1,2 1,3 +# +# 2,0 2,1 2,2 2,3 +# +# rotating the whole thing clockwise 45° makes the underlying +# graph easier to see. +# +# (0,0) <-- START +# ⬋ ⬊ +# (1,0) (0,1) +# ⬋ ⬊ ⬋ ⬊ +# (2,0) (1,1) (0,2) +# ⬊ ⬋ ⬊ ⬋ ⬊ +# (2,1) (1,2) (0,3) +# ⬊ ⬋ ⬊ ⬋ +# (2,2) (1,3) +# ⬊ ⬋ +# (2,3) <-- END +# +# It’s like a tree that links back into itself, and we progress +# from top to bottom, traveling inexorably downward, as in a +# pachinko machine with only one pocket. There’s a juicy +# metaphor in there somewhere. In any case as can easily be seen +# there are many ways to proceed, but if we remain bound to the +# restrictions we will always end up at the same endpoint. +# +# When situated at any given point, on the other hand, we are +# only allowed at maximum two choices in direction. If we build +# a recursive function that will follow each open pathway +# available at the current node, by the time we get to the +# endpoint we will have logged every possible route. Then we can +# take those routes, as lists of points, and do a lookup to the +# original values at each point to do the sums. The smallest of +# these is the solution. Because we are asked to find “a path” +# with the minimal sum, in the case of multiple equal answers +# any one will do. + +# For the Raku solution I wanted to build some classes to +# compartmentalize the ideas of the graph and its vertices. It +# seemed a good way to separate the underlying structure from +# the data. I thought about serializing the input grid, with an +# x and y value followed by the values in a long list, but +# decided it distracted from the logic while providing little +# gain, so I hardwired in a crafted example array. There is a -v +# verbose command line switch though, which adds a pretty +# printing of the original grid and a list of the point +# coordinates of the vertices in the final route. +# +# To start we need a simple Vertex, which holds an x and y +# coordinate and a gist method for display, as (x,y). +# +# In the Grid class for data we have just the input grid. We +# have added methods to: +# +# •find the endpoint and return it (as a Vertex) +# •find the theoretical following two Vertex points, which +# are composed by adding 1 to either the x value or the y +# value +# •determine whether a given Vertex is within the Grid or +# not +# •sum the values referenced along a given route, by mapping +# to the $.grid data and using the sum [+] metaoperator. +# +# In the MAIN block we have input, output and two logic +# sections, to trace the paths and determine the minimum sum. +# +# The find_nodes() routine first checks whether the given Vertex +# is the endpoint, logging the completed chain and returning if +# so. It then posits two potential new Vertexes, treating their +# creator methods as proper first-order functions in a for loop. +# For each of these we check to see whether its remains within +# the Grid, and if so we clone the route so far, extending it +# with that new Vertex, and recurse with the new parameters. +# Eventually all routes lead to the endpoint and terminate. +# +# Summing a given list of vertices from outside is using the +# data from the Grid object to compute and so it seems a method +# of that object is a good place to put that logic. On the other +# hand, using those sums to find the minimum sum of a variety of +# routes isn’t particularly intrinsic to the data structure so +# we leave that in the MAIN block. This task is easily +# dispatched in Raku: +# +# my $minpath = @paths.min( { $graph.sum_route( $_ ) } ); +# +# In this method we are providing a code block to apply to the +# data; it returns the minimum value of the array, as determined +# by those transformed values returned by the block. This design +# pattern is available for all of the min/max list functions, as +# if you ask me is very, very cool. Think of it as being +# analogous to handing sort() a block to determine the ordering. +# One thing though, because we’ve used this first-class function +# option, after we’ve found the minimum route we’ll still need +# to compute the minimum sum for that minimal route we’ve found. +# We could use a map and a hash and save the value, but this way +# is rather ridiculously easy and succinct so we’re going to go +# with that. +# +# +# 2020 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + +class Vertex { + has Int $.x; + has Int $.y; + + method gist { + return "($.x,$.y)"; + } +} + +class Grid { + ## a special case of a rectangular grid DAG where we can + ## only progress rightwards or downwards between vertices + has $.grid; + + method endpoint () { + ## lower right corner of the grid + return Vertex.new: :x(self.grid[0].end), :y(self.grid.end) + } + + method down_edge ($vertex) { + return Vertex.new: :x($vertex.x), :y($vertex.y + 1) + } + + method right_edge ($vertex) { + return Vertex.new: :x($vertex.x + 1), :y($vertex.y) + } + + method sum_route ($route) { + ## given a path of vertices, return the sum of the values + my $sum = [+] $route.map( { $.grid[.y][.x] } ); + return $sum; + } + + method out_of_bounds ($vertex) { + ## Bool is vertex outside the grid? + return ($vertex.x > self.endpoint.x || $vertex.y > self.endpoint.y) + ?? True + !! False + } + +} + +sub MAIN (Bool :$v = False) { + + ## input + my @grid = [1, 16, 12, 43, 48, 19], + [13, 7, 9, 16, 26, 8], + [23, 18, 6, 11, 15, 17], + [22, 33, 28, 5, 36, 32], + [38, 43, 9, 46, 3, 42], + [56, 4, 66, 76, 25, 2], + [27, 10, 58, 14, 68, 52]; + + my $graph = Grid.new: :grid(@grid); + my @paths; + my $startpoint = Vertex.new: :x(0), :y(0); + my $route = [$startpoint]; + + find_nodes( $route, $startpoint, $graph, @paths ); + + my $minpath = @paths.min( { $graph.sum_route( $_ ) } ); + my $minsum = $graph.sum_route( $minpath ); + + ## output + say "grid:" if $v; + (.fmt( '%3d', ' ' ).say for $graph.grid) if $v; + say "minimum sum: $minsum"; + say "route:"; + say $minpath if $v; + $minpath.map( { $graph.grid[.y][.x] } ).join( ' ➔ ' ).say; +} + +sub find_nodes ($route, $vertex, $graph, @paths) { + + if $vertex eqv $graph.endpoint( ) { + @paths.push: $route; + return; + } + for ($graph.down_edge( $vertex ), $graph.right_edge( $vertex )) -> $next_vertex { + next if $graph.out_of_bounds( $next_vertex ); + my $new_path = [|$route, $next_vertex]; + find_nodes( $new_path, $next_vertex, $graph, @paths ); + } +} diff --git a/challenge-064/colin-crain/raku/ch-2.p6 b/challenge-064/colin-crain/raku/ch-2.p6 new file mode 100644 index 0000000000..84b76b1eaa --- /dev/null +++ b/challenge-064/colin-crain/raku/ch-2.p6 @@ -0,0 +1,83 @@ +#!/usr/bin/env perl6 +# TASK #2 › WORD BREAK +# +# Submitted by: Mohammad S Anwar +# +# You are given a string $S and an array of words @W. +# +# Write a script to find out if $S can be split into +# sequence of one or more words as in the given @W. +# +# Print the all the words if found otherwise print 0. +# +# EXAMPLE 1: +# +# Input: +# +# $S = "perlweeklychallenge" +# @W = ("weekly", "challenge", "perl") +# +# Output: +# +# "perl", "weekly", "challenge" +# EXAMPLE 2: +# +# Input: +# +# $S = "perlandraku" +# @W = ("python", "ruby", "haskell") +# +# Output: +# +# 0 as none matching word found. +# +# METHOD +# +# I have been called… things… for my love of regular +# expressions. That it wasn’t natural. Suggestions that +# there was something… off maybe, somewhere deep inside me. +# Not to discount the possibility that those people were on +# to something, I have persisted in the face of the critics. +# Refusing to be shamed, I announce it to the world. It has +# always been perhaps my favorite feature of the language, +# which is no small praise in a language with so many nice +# thing to say about it. +# +# One cannot overstate the immense power contained in the +# DSL that is Perl Regular Expressions. The added features +# of the Raku RE engine only serve to augment that power, +# and every time I have an opportunity to learn about +# something new they’ve come up with I find myself giggling +# with glee. Oh you can do that now? Sweet… Larry’s vision +# of RE really knocked it out of the park when Perl grew to +# rule the web, and the PCRE library spawned from that +# effort still holds a very promenant position today. With +# Raku, they have in a sense applied a metaoperator to the +# the very idea of regexes, expanding the initial DSL into a +# complete object ecosystem known as Grammers which we can +# in turn use to write new DSLs.* It does take a little +# getting used to coming from pure Perl, but it well worth +# the effort. +# +# This challenge, as I understand it, seems to me to be a +# straightforward application of regular expressions. +# +# --------------- +# * Andrew Shitov Creating a Complier With Raku +# https://andrewshitov.com/creating-a-compiler-with-raku/ + +sub MAIN(Str:D $string, *@words) { + my $group = @words.join(' | '); + my $matches = $string ~~ m:g/ <$group> /; + $matches.list.elems ?? (.Str.say for $matches.list) + !! say '0'; + +# say "two:"; +# $matches = $string ~~ m:g/ +# | weekly +# | perl +# | challenge +# /; +# .Str.say for $matches.list; + +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index c1dfc0a2a7..429afef308 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,13 +1,11 @@ { - "tooltip" : { - "headerFormat" : "{series.name}
", - "pointFormat" : "{point.name}: {point.y:f}
", - "followPointer" : 1 + "legend" : { + "enabled" : 0 }, "series" : [ { - "name" : "Perl Weekly Challenge - 064", "colorByPoint" : 1, + "name" : "Perl Weekly Challenge - 064", "data" : [ { "y" : 3, @@ -20,103 +18,103 @@ "y" : 2 }, { - "y" : 3, "name" : "Bartosz Jarzyna", - "drilldown" : "Bartosz Jarzyna" + "drilldown" : "Bartosz Jarzyna", + "y" : 3 }, { - "drilldown" : "Cheok-Yin Fung", "name" : "Cheok-Yin Fung", + "drilldown" : "Cheok-Yin Fung", "y" : 3 }, { "drilldown" : "Colin Crain", "name" : "Colin Crain", - "y" : 1 + "y" : 5 }, { + "drilldown" : "Dave Jacoby", "name" : "Dave Jacoby", - "y" : 3, - "drilldown" : "Dave Jacoby" + "y" : 3 }, { - "y" : 2, + "drilldown" : "Duncan C. White", "name" : "Duncan C. White", - "drilldown" : "Duncan C. White" + "y" : 2 }, { - "drilldown" : "E. Choroba", "name" : "E. Choroba", + "drilldown" : "E. Choroba", "y" : 2 }, { "name" : "Javier Luque", - "y" : 5, - "drilldown" : "Javier Luque" + "drilldown" : "Javier Luque", + "y" : 5 }, { + "y" : 2, "drilldown" : "Jorg Sommrey", - "name" : "Jorg Sommrey", - "y" : 2 + "name" : "Jorg Sommrey" }, { - "drilldown" : "Laurent Rosenfeld", "name" : "Laurent Rosenfeld", + "drilldown" : "Laurent Rosenfeld", "y" : 5 }, { - "name" : "Leo Manfredi", "y" : 1, - "drilldown" : "Leo Manfredi" + "drilldown" : "Leo Manfredi", + "name" : "Leo Manfredi" }, { + "name" : "Luca Ferrari", "drilldown" : "Luca Ferrari", - "y" : 4, - "name" : "Luca Ferrari" + "y" : 4 }, { - "drilldown" : "Mark Anderson", + "y" : 2, "name" : "Mark Anderson", - "y" : 2 + "drilldown" : "Mark Anderson" }, { + "y" : 4, "drilldown" : "Mohammad S Anwar", - "name" : "Mohammad S Anwar", - "y" : 4 + "name" : "Mohammad S Anwar" }, { - "y" : 2, "name" : "Niels van Dijke", - "drilldown" : "Niels van Dijke" + "drilldown" : "Niels van Dijke", + "y" : 2 }, { "drilldown" : "Richard Hainsworth", - "y" : 1, - "name" : "Richard Hainsworth" + "name" : "Richard Hainsworth", + "y" : 1 }, { + "drilldown" : "Richard Park", "name" : "Richard Park", - "y" : 1, - "drilldown" : "Richard Park" + "y" : 1 }, { "name" : "Roger Bell_West", - "y" : 5, - "drilldown" : "Roger Bell_West" + "drilldown" : "Roger Bell_West", + "y" : 5 }, { - "name" : "Sangeet Kar", "y" : 2, - "drilldown" : "Sangeet Kar" + "drilldown" : "Sangeet Kar", + "name" : "Sangeet Kar" }, { - "y" : 2, "name" : "Simon Proctor", - "drilldown" : "Simon Proctor" + "drilldown" : "Simon Proctor", + "y" : 2 }, { - "name" : "Ulrich Rieke", "y" : 2, + "name" : "Ulrich Rieke", "drilldown" : "Ulrich Rieke" }, { @@ -130,6 +128,8 @@ "drilldown" : { "series" : [ { + "name" : "Arne Sommer", + "id" : "Arne Sommer", "data" : [ [ "Raku", @@ -139,9 +139,7 @@ "Blog", 1 ] - ], - "id" : "Arne Sommer", - "name" : "Arne Sommer" + ] }, { "data" : [ @@ -158,8 +156,6 @@ "id" : "Athanasius" }, { - "id" : "Bartosz Jarzyna", - "name" : "Bartosz Jarzyna", "data" : [ [ "Perl", @@ -169,7 +165,9 @@ "Blog", 1 ] - ] + ], + "name" : "Bartosz Jarzyna", + "id" : "Bartosz Jarzyna" }, { "name" : "Cheok-Yin Fung", @@ -187,6 +185,14 @@ }, { "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], [ "Blog", 1 @@ -196,6 +202,8 @@ "name" : "Colin Crain" }, { + "name" : "Dave Jacoby", + "id" : "Dave Jacoby", "data" : [ [ "Perl", @@ -205,9 +213,7 @@ "Blog", 1 ] - ], - "id" : "Dave Jacoby", - "name" : "Dave Jacoby" + ] }, { "data" : [ @@ -216,8 +222,8 @@ 2 ] ], - "name" : "Duncan C. White", - "id" : "Duncan C. White" + "id" : "Duncan C. White", + "name" : "Duncan C. White" }, { "data" : [ @@ -276,14 +282,14 @@ "name" : "Laurent Rosenfeld" }, { + "name" : "Leo Manfredi", + "id" : "Leo Manfredi", "data" : [ [ "Perl", 1 ] - ], - "name" : "Leo Manfredi", - "id" : "Leo Manfredi" + ] }, { "name" : "Luca Ferrari", @@ -306,12 +312,12 @@ 2 ] ], - "id" : "Mark Anderson", - "name" : "Mark Anderson" + "name" : "Mark Anderson", + "id" : "Mark Anderson" }, { - "id" : "Mohammad S Anwar", "name" : "Mohammad S Anwar", + "id" : "Mohammad S Anwar", "data" : [ [ "Perl", @@ -338,8 +344,8 @@ ] }, { - "id" : "Richard Hainsworth", "name" : "Richard Hainsworth", + "id" : "Richard Hainsworth", "data" : [ [ "Raku", @@ -348,16 +354,18 @@ ] }, { + "name" : "Richard Park", + "id" : "Richard Park", "data" : [ [ "Blog", 1 ] - ], - "id" : "Richard Park", - "name" : "Richard Park" + ] }, { + "id" : "Roger Bell_West", + "name" : "Roger Bell_West", "data" : [ [ "Perl", @@ -371,23 +379,21 @@ "Blog", 1 ] - ], - "id" : "Roger Bell_West", - "name" : "Roger Bell_West" + ] }, { - "id" : "Sangeet Kar", - "name" : "Sangeet Kar", "data" : [ [ "Raku", 2 ] - ] + ], + "id" : "Sangeet Kar", + "name" : "Sangeet Kar" }, { - "name" : "Simon Proctor", "id" : "Simon Proctor", + "name" : "Simon Proctor", "data" : [ [ "Raku", @@ -396,54 +402,56 @@ ] }, { - "name" : "Ulrich Rieke", - "id" : "Ulrich Rieke", "data" : [ [ "Perl", 2 ] - ] + ], + "name" : "Ulrich Rieke", + "id" : "Ulrich Rieke" }, { + "name" : "Wanderdoc", + "id" : "Wanderdoc", "data" : [ [ "Perl", 2 ] - ], - "name" : "Wanderdoc", - "id" : "Wanderdoc" + ] } ] }, - "xAxis" : { - "type" : "category" + "subtitle" : { + "text" : "[Champions: 23] Last updated at 2020-06-14 23:08:58 GMT" }, "chart" : { "type" : "column" }, - "subtitle" : { - "text" : "[Champions: 23] Last updated at 2020-06-14 22:59:31 GMT" - }, - "title" : { - "text" : "Perl Weekly Challenge - 064" + "xAxis" : { + "type" : "category" }, "yAxis" : { "title" : { "text" : "Total Solutions" } }, - "legend" : { - "enabled" : 0 + "title" : { + "text" : "Perl Weekly Challenge - 064" }, "plotOptions" : { "series" : { "borderWidth" : 0, "dataLabels" : { - "enabled" : 1, - "format" : "{point.y}" + "format" : "{point.y}", + "enabled" : 1 } } + }, + "tooltip" : { + "pointFormat" : "{point.name}: {point.y:f}
", + "followPointer" : 1, + "headerFormat" : "{series.name}
" } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index be2443d02d..443999deba 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,37 +1,9 @@ { - "subtitle" : { - "text" : "Last updated at 2020-06-14 22:59:31 GMT" - }, - "title" : { - "text" : "Perl Weekly Challenge Contributions [2019 - 2020]" - }, - "yAxis" : { - "title" : { - "text" : null - }, - "min" : 0 - }, "legend" : { "enabled" : "false" }, - "tooltip" : { - "pointFormat" : "{point.y:.0f}" - }, "series" : [ { - "name" : "Contributions", - "dataLabels" : { - "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" - }, - "format" : "{point.y:.0f}", - "align" : "right", - "y" : 10, - "rotation" : -90, - "color" : "#FFFFFF", - "enabled" : "true" - }, "data" : [ [ "Blog", @@ -39,25 +11,53 @@ ], [ "Perl", - 2670 + 2672 ], [ "Raku", - 1692 + 1694 ] - ] + ], + "dataLabels" : { + "rotation" : -90, + "enabled" : "true", + "color" : "#FFFFFF", + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + }, + "y" : 10, + "align" : "right", + "format" : "{point.y:.0f}" + }, + "name" : "Contributions" } ], + "subtitle" : { + "text" : "Last updated at 2020-06-14 23:08:57 GMT" + }, + "chart" : { + "type" : "column" + }, "xAxis" : { + "type" : "category", "labels" : { "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" } - }, - "type" : "category" + } }, - "chart" : { - "type" : "column" + "yAxis" : { + "min" : 0, + "title" : { + "text" : null + } + }, + "title" : { + "text" : "Perl Weekly Challenge Contributions [2019 - 2020]" + }, + "tooltip" : { + "pointFormat" : "{point.y:.0f}" } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 017c8807cc..8b92cc88ab 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,32 +1,38 @@ { - "legend" : { - "enabled" : "false" + "tooltip" : { + "headerFormat" : "", + "followPointer" : "true", + "pointFormat" : "Challenge {point.name}: {point.y:f}
" }, "plotOptions" : { "series" : { "borderWidth" : 0, "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 + "enabled" : 1, + "format" : "{point.y}" } } }, - "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2020-06-14 22:59:31 GMT" + "title" : { + "text" : "Perl Weekly Challenge Language" }, "yAxis" : { "title" : { "text" : "Total Solutions" } }, - "title" : { - "text" : "Perl Weekly Challenge Language" + "xAxis" : { + "type" : "category" + }, + "chart" : { + "type" : "column" + }, + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2020-06-14 23:08:58 GMT" }, "drilldown" : { "series" : [ { - "name" : "001", - "id" : "001", "data" : [ [ "Perl", @@ -40,9 +46,13 @@ "Blog", 11 ] - ] + ], + "name" : "001", + "id" : "001" }, { + "id" : "002", + "name" : "002", "data" : [ [ "Perl", @@ -56,13 +66,9 @@ "Blog", 10 ] - ], - "name" : "002", - "id" : "002" + ] }, { - "id" : "003", - "name" : "003", "data" : [ [ "Perl", @@ -76,7 +82,9 @@ "Blog", 9 ] - ] + ], + "name" : "003", + "id" : "003" }, { "data" : [ @@ -93,12 +101,10 @@ 10 ] ], - "id" : "004", - "name" : "004" + "name" : "004", + "id" : "004" }, { - "id" : "005", - "name" : "005", "data" : [ [ "Perl", @@ -112,11 +118,13 @@ "Blog", 12 ] - ] + ], + "id" : "005", + "name" : "005" }, { - "name" : "006", "id" : "006", + "name" : "006", "data" : [ [ "Perl", @@ -133,8 +141,8 @@ ] }, { - "name" : "007", "id" : "007", + "name" : "007", "data" : [ [ "Perl", @@ -169,6 +177,8 @@ "id" : "008" }, { + "id" : "009", + "name" : "009", "data" : [ [ "Perl", @@ -182,9 +192,7 @@ "Blog", 13 ] - ], - "name" : "009", - "id" : "009" + ] }, { "name" : "010", @@ -205,6 +213,8 @@ ] }, { + "name" : "011", + "id" : "011", "data" : [ [ "Perl", @@ -218,9 +228,7 @@ "Blog", 10 ] - ], - "id" : "011", - "name" : "011" + ] }, { "data" : [ @@ -259,6 +267,8 @@ "name" : "013" }, { + "name" : "014", + "id" : "014", "data" : [ [ "Perl", @@ -272,9 +282,7 @@ "Blog", 15 ] - ], - "name" : "014", - "id" : "014" + ] }, { "data" : [ @@ -291,10 +299,12 @@ 15 ] ], - "id" : "015", - "name" : "015" + "name" : "015", + "id" : "015" }, { + "id" : "016", + "name" : "016", "data" : [ [ "Perl", @@ -308,13 +318,11 @@ "Blog", 12 ] - ], - "id" : "016", - "name" : "016" + ] }, { - "name" : "017", "id" : "017", + "name" : "017", "data" : [ [ "Perl", @@ -345,8 +353,8 @@ 14 ] ], - "name" : "018", - "id" : "018" + "id" : "018", + "name" : "018" }, { "data" : [ @@ -363,8 +371,8 @@ 13 ] ], - "id" : "019", - "name" : "019" + "name" : "019", + "id" : "019" }, { "name" : "020", @@ -399,8 +407,8 @@ 10 ] ], - "id" : "021", - "name" : "021" + "name" : "021", + "id" : "021" }, { "data" : [ @@ -417,12 +425,10 @@ 10 ] ], - "name" : "022", - "id" : "022" + "id" : "022", + "name" : "022" }, { - "name" : "023", - "id" : "023", "data" : [ [ "Perl", @@ -436,9 +442,13 @@ "Blog", 12 ] - ] + ], + "id" : "023", + "name" : "023" }, { + "id" : "024", + "name" : "024", "data" : [ [ "Perl", @@ -452,9 +462,7 @@ "Blog", 11 ] - ], - "name" : "024", - "id" : "024" + ] }, { "id" : "025", @@ -475,6 +483,8 @@ ] }, { + "id" : "026", + "name" : "026", "data" : [ [ "Perl", @@ -488,13 +498,11 @@ "Blog", 10 ] - ], - "id" : "026", - "name" : "026" + ] }, { - "name" : "027", "id" : "027", + "name" : "027", "data" : [ [ "Perl", @@ -511,6 +519,8 @@ ] }, { + "name" : "028", + "id" : "028", "data" : [ [ "Perl", @@ -524,11 +534,11 @@ "Blog", 9 ] - ], - "id" : "028", - "name" : "028" + ] }, { + "id" : "029", + "name" : "029", "data" : [ [ "Perl", @@ -542,13 +552,9 @@ "Blog", 12 ] - ], - "name" : "029", - "id" : "029" + ] }, { - "name" : "030", - "id" : "030", "data" : [ [ "Perl", @@ -562,9 +568,13 @@ "Blog", 10 ] - ] + ], + "name" : "030", + "id" : "030" }, { + "name" : "031", + "id" : "031", "data" : [ [ "Perl", @@ -578,13 +588,11 @@ "Blog", 9 ] - ], - "name" : "031", - "id" : "031" + ] }, { - "name" : "032", "id" : "032", + "name" : "032", "data" : [ [ "Perl", @@ -619,8 +627,6 @@ ] }, { - "id" : "034", - "name" : "034", "data" : [ [ "Perl", @@ -634,7 +640,9 @@ "Blog", 11 ] - ] + ], + "id" : "034", + "name" : "034" }, { "data" : [ @@ -651,10 +659,12 @@ 9 ] ], - "id" : "035", - "name" : "035" + "name" : "035", + "id" : "035" }, { + "name" : "036", + "id" : "036", "data" : [ [ "Perl", @@ -668,13 +678,11 @@ "Blog", 11 ] - ], - "id" : "036", - "name" : "036" + ] }, { - "id" : "037", "name" : "037", + "id" : "037", "data" : [ [ "Perl", @@ -691,6 +699,8 @@ ] }, { + "name" : "038", + "id" : "038", "data" : [ [ "Perl", @@ -704,11 +714,11 @@ "Blog", 12 ] - ], - "id" : "038", - "name" : "038" + ] }, { + "name" : "039", + "id" : "039", "data" : [ [ "Perl", @@ -722,9 +732,7 @@ "Blog", 12 ] - ], - "id" : "039", - "name" : "039" + ] }, { "data" : [ @@ -763,8 +771,6 @@ "id" : "041" }, { - "name" : "042", - "id" : "042", "data" : [ [ "Perl", @@ -778,11 +784,11 @@ "Blog", 11 ] - ] + ], + "id" : "042", + "name" : "042" }, { - "id" : "043", - "name" : "043", "data" : [ [ "Perl", @@ -796,11 +802,11 @@ "Blog", 11 ] - ] + ], + "id" : "043", + "name" : "043" }, { - "name" : "044", - "id" : "044", "data" : [ [ "Perl", @@ -814,11 +820,11 @@ "Blog", 11 ] - ] + ], + "id" : "044", + "name" : "044" }, { - "name" : "045", - "id" : "045", "data" : [ [ "Perl", @@ -832,7 +838,9 @@ "Blog", 11 ] - ] + ], + "id" : "045", + "name" : "045" }, { "id" : "046", @@ -853,6 +861,8 @@ ] }, { + "id" : "047", + "name" : "047", "data" : [ [ "Perl", @@ -866,11 +876,11 @@ "Blog", 10 ] - ], - "id" : "047", - "name" : "047" + ] }, { + "name" : "048", + "id" : "048", "data" : [ [ "Perl", @@ -884,9 +894,7 @@ "Blog", 12 ] - ], - "id" : "048", - "name" : "048" + ] }, { "data" : [ @@ -903,12 +911,12 @@ 12 ] ], - "name" : "049", - "id" : "049" + "id" : "049", + "name" : "049" }, { - "id" : "050", "name" : "050", + "id" : "050", "data" : [ [ "Perl", @@ -943,6 +951,8 @@ ] }, { + "id" : "052", + "name" : "052", "data" : [ [ "Perl", @@ -956,11 +966,11 @@ "Blog", 14 ] - ], - "name" : "052", - "id" : "052" + ] }, { + "name" : "053", + "id" : "053", "data" : [ [ "Perl", @@ -974,11 +984,11 @@ "Blog", 15 ] - ], - "name" : "053", - "id" : "053" + ] }, { + "id" : "054", + "name" : "054", "data" : [ [ "Perl", @@ -992,9 +1002,7 @@ "Blog", 16 ] - ], - "id" : "054", - "name" : "054" + ] }, { "data" : [ @@ -1029,12 +1037,10 @@ 16 ] ], - "id" : "056", - "name" : "056" + "name" : "056", + "id" : "056" }, { - "name" : "057", - "id" : "057", "data" : [ [ "Perl", @@ -1048,7 +1054,9 @@ "Blog", 15 ] - ] + ], + "id" : "057", + "name" : "057" }, { "data" : [ @@ -1069,8 +1077,8 @@ "name" : "058" }, { - "name" : "059", "id" : "059", + "name" : "059", "data" : [ [ "Perl", @@ -1105,6 +1113,8 @@ ] }, { + "name" : "061", + "id" : "061", "data" : [ [ "Perl", @@ -1118,11 +1128,11 @@ "Blog", 14 ] - ], - "name" : "061", - "id" : "061" + ] }, { + "id" : "062", + "name" : "062", "data" : [ [ "Perl", @@ -1136,9 +1146,7 @@ "Blog", 11 ] - ], - "name" : "062", - "id" : "062" + ] }, { "data" : [ @@ -1155,18 +1163,18 @@ 13 ] ], - "id" : "063", - "name" : "063" + "name" : "063", + "id" : "063" }, { "data" : [ [ "Perl", - 28 + 30 ], [ "Raku", - 19 + 21 ], [ "Blog", @@ -1178,124 +1186,115 @@ } ] }, - "chart" : { - "type" : "column" - }, - "xAxis" : { - "type" : "category" - }, - "tooltip" : { - "headerFormat" : "", - "followPointer" : "true", - "pointFormat" : "Challenge {point.name}: {point.y:f}
" - }, "series" : [ { + "name" : "Perl Weekly Challenge Languages", + "colorByPoint" : "true", "data" : [ { - "drilldown" : "001", "name" : "#001", + "drilldown" : "001", "y" : 142 }, { - "drilldown" : "002", "y" : 109, + "drilldown" : "002", "name" : "#002" }, { + "y" : 71, "drilldown" : "003", - "name" : "#003", - "y" : 71 + "name" : "#003" }, { "name" : "#004", - "y" : 91, - "drilldown" : "004" + "drilldown" : "004", + "y" : 91 }, { "name" : "#005", - "y" : 72, - "drilldown" : "005" + "drilldown" : "005", + "y" : 72 }, { - "name" : "#006", "y" : 52, + "name" : "#006", "drilldown" : "006" }, { "drilldown" : "007", - "y" : 59, - "name" : "#007" + "name" : "#007", + "y" : 59 }, { - "drilldown" : "008", "y" : 72, + "drilldown" : "008", "name" : "#008" }, { "y" : 68, - "name" : "#009", - "drilldown" : "009" + "drilldown" : "009", + "name" : "#009" }, { - "y" : 60, "name" : "#010", - "drilldown" : "010" + "drilldown" : "010", + "y" : 60 }, { - "drilldown" : "011", "y" : 79, + "drilldown" : "011", "name" : "#011" }, { - "name" : "#012", "y" : 83, + "name" : "#012", "drilldown" : "012" }, { - "name" : "#013", "y" : 76, + "name" : "#013", "drilldown" : "013" }, { - "drilldown" : "014", "name" : "#014", + "drilldown" : "014", "y" : 96 }, { - "name" : "#015", "y" : 93, - "drilldown" : "015" + "drilldown" : "015", + "name" : "#015" }, { "name" : "#016", - "y" : 66, - "drilldown" : "016" + "drilldown" : "016", + "y" : 66 }, { + "name" : "#017", "drilldown" : "017", - "y" : 79, - "name" : "#017" + "y" : 79 }, { - "name" : "#018", "y" : 76, - "drilldown" : "018" + "drilldown" : "018", + "name" : "#018" }, { "drilldown" : "019", - "y" : 97, - "name" : "#019" + "name" : "#019", + "y" : 97 }, { "drilldown" : "020", - "y" : 95, - "name" : "#020" + "name" : "#020", + "y" : 95 }, { - "y" : 67, + "drilldown" : "021", "name" : "#021", - "drilldown" : "021" + "y" : 67 }, { "y" : 63, @@ -1303,124 +1302,124 @@ "drilldown" : "022" }, { - "y" : 91, "name" : "#023", - "drilldown" : "023" + "drilldown" : "023", + "y" : 91 }, { "drilldown" : "024", - "y" : 70, - "name" : "#024" + "name" : "#024", + "y" : 70 }, { - "y" : 55, "name" : "#025", - "drilldown" : "025" + "drilldown" : "025", + "y" : 55 }, { - "y" : 70, "name" : "#026", - "drilldown" : "026" + "drilldown" : "026", + "y" : 70 }, { - "drilldown" : "027", + "y" : 58, "name" : "#027", - "y" : 58 + "drilldown" : "027" }, { + "y" : 78, "drilldown" : "028", - "name" : "#028", - "y" : 78 + "name" : "#028" }, { - "name" : "#029", "y" : 77, - "drilldown" : "029" + "drilldown" : "029", + "name" : "#029" }, { - "name" : "#030", "y" : 115, - "drilldown" : "030" + "drilldown" : "030", + "name" : "#030" }, { - "name" : "#031", "y" : 87, - "drilldown" : "031" + "drilldown" : "031", + "name" : "#031" }, { - "y" : 92, "name" : "#032", - "drilldown" : "032" + "drilldown" : "032", + "y" : 92 }, { - "drilldown" : "033", "name" : "#033", + "drilldown" : "033", "y" : 108 }, { + "y" : 62, "drilldown" : "034", - "name" : "#034", - "y" : 62 + "name" : "#034" }, { - "y" : 62, "name" : "#035", - "drilldown" : "035" + "drilldown" : "035", + "y" : 62 }, { "name" : "#036", - "y" : 66, - "drilldown" : "036" + "drilldown" : "036", + "y" : 66 }, { - "drilldown" : "037", "y" : 65, - "name" : "#037" + "name" : "#037", + "drilldown" : "037" }, { + "drilldown" : "038", "name" : "#038", - "y" : 65, - "drilldown" : "038" + "y" : 65 }, { - "drilldown" : "039", "y" : 60, - "name" : "#039" + "name" : "#039", + "drilldown" : "039" }, { - "drilldown" : "040", "y" : 71, - "name" : "#040" + "name" : "#040", + "drilldown" : "040" }, { - "drilldown" : "041", + "y" : 74, "name" : "#041", - "y" : 74 + "drilldown" : "041" }, { - "drilldown" : "042", + "y" : 88, "name" : "#042", - "y" : 88 + "drilldown" : "042" }, { + "name" : "#043", "drilldown" : "043", - "y" : 66, - "name" : "#043" + "y" : 66 }, { - "drilldown" : "044", + "y" : 82, "name" : "#044", - "y" : 82 + "drilldown" : "044" }, { - "name" : "#045", "y" : 94, - "drilldown" : "045" + "drilldown" : "045", + "name" : "#045" }, { - "drilldown" : "046", "y" : 85, - "name" : "#046" + "name" : "#046", + "drilldown" : "046" }, { "drilldown" : "047", @@ -1428,19 +1427,19 @@ "y" : 82 }, { - "y" : 106, "name" : "#048", - "drilldown" : "048" + "drilldown" : "048", + "y" : 106 }, { + "drilldown" : "049", "name" : "#049", - "y" : 85, - "drilldown" : "049" + "y" : 85 }, { - "y" : 96, "name" : "#050", - "drilldown" : "050" + "drilldown" : "050", + "y" : 96 }, { "drilldown" : "051", @@ -1453,14 +1452,14 @@ "y" : 89 }, { - "drilldown" : "053", "name" : "#053", + "drilldown" : "053", "y" : 99 }, { "name" : "#054", - "y" : 99, - "drilldown" : "054" + "drilldown" : "054", + "y" : 99 }, { "drilldown" : "055", @@ -1473,9 +1472,9 @@ "drilldown" : "056" }, { + "drilldown" : "057", "name" : "#057", - "y" : 78, - "drilldown" : "057" + "y" : 78 }, { "drilldown" : "058", @@ -1484,37 +1483,38 @@ }, { "y" : 82, - "name" : "#059", - "drilldown" : "059" + "drilldown" : "059", + "name" : "#059" }, { - "name" : "#060", "y" : 78, - "drilldown" : "060" + "drilldown" : "060", + "name" : "#060" }, { + "name" : "#061", "drilldown" : "061", - "y" : 79, - "name" : "