aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-086/colin-crain/perl/ch-1.pl92
-rw-r--r--challenge-086/colin-crain/perl/ch-2.pl408
-rw-r--r--challenge-086/colin-crain/raku/ch-1.raku22
-rw-r--r--stats/pwc-current.json309
-rw-r--r--stats/pwc-language-breakdown-summary.json72
-rw-r--r--stats/pwc-language-breakdown.json1270
-rw-r--r--stats/pwc-leaders.json750
-rw-r--r--stats/pwc-summary-1-30.json28
-rw-r--r--stats/pwc-summary-121-150.json116
-rw-r--r--stats/pwc-summary-151-180.json94
-rw-r--r--stats/pwc-summary-181-210.json38
-rw-r--r--stats/pwc-summary-31-60.json52
-rw-r--r--stats/pwc-summary-61-90.json98
-rw-r--r--stats/pwc-summary-91-120.json48
-rw-r--r--stats/pwc-summary.json40
15 files changed, 1989 insertions, 1448 deletions
diff --git a/challenge-086/colin-crain/perl/ch-1.pl b/challenge-086/colin-crain/perl/ch-1.pl
new file mode 100644
index 0000000000..0fe7a7d185
--- /dev/null
+++ b/challenge-086/colin-crain/perl/ch-1.pl
@@ -0,0 +1,92 @@
+#! /opt/local/bin/perl
+#
+# difference_engine.pl
+#
+# TASK #1 › Pair Difference
+# Submitted by: Mohammad S Anwar
+# You are given an array of integers @N and an integer $A.
+#
+# Write a script to find find if there exists a pair of elements in the
+# array whose difference is $A.
+#
+# Print 1 if exists otherwise 0.
+#
+# Example 1:
+# Input: @N = (10, 8, 12, 15, 5) and $A = 7
+# Output: 1 as 15 - 8 = 7
+# Example 2:
+# Input: @N = (1, 5, 2, 9, 7) and $A = 6
+# Output: 1 as 7 - 1 = 6
+# Example 3:
+# Input: @N = (10, 30, 20, 50, 40) and $A = 15
+# Output: 0
+
+# method:
+# a gentle warm-up for the second challenge, this task requires us
+# to find combinations of integers from a set that can produce a
+# certain value as a difference. It's worth noting that it's not
+# specified, only implied by the examples, that the numbers be
+# positive. I see no compelling reason to require this, so we won't.
+#
+# We only need to do the calculations in one direction; positive
+# values can be turned into their negative counterparts by reversing
+# the values:
+#
+# a - b = c --> b - a = -c
+#
+# Rather than compute a list of combinations and trying them out, we
+# can try and constrict the search space by first sorting the list
+# in descending order. Then we can start iterating over the values.
+# Even if the first value is not greater than the target, it can
+# theoretically be reduced to fit by subtracting a negative number.
+# We take the next value and subtract it. If the difference is less
+# than the target, we can continue, subtracting a smaller amount
+# with the next value until we match or exceed the goal. One thing
+# is certain, that the computed differences will grow as we move the
+# second value to the right along the list. Consequently, if we
+# exceed the target we immediately move the initial value forward
+# one step.
+#
+# What of negative values you ask? Well if we take the absolute
+# value of the target in the beginning we match against that. By use
+# of the equality mentioned above we can change the sign by
+# reversing the values as required. Which we don't have to actually do,
+# we only need to know we can and act on that.
+
+#
+# 2020 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+use warnings;
+use strict;
+use feature ":5.26";
+
+## ## ## ## ## MAIN:
+
+## default looks for value -115 from array
+scalar @ARGV == 0 and @ARGV = (-115, 100, 25, 15, 0 , -1, -2, -100);
+
+my ($target, @input) = @ARGV;
+
+my @sorted = sort {$b-$a} @input;
+
+
+for my $m (0..scalar @input - 1) {
+ for my $n ($m..scalar @input - 1) {
+ say 1 and exit if $sorted[$m] - $sorted[$n] == abs $target;
+ }
+}
+say 0;
+
+
+
+
+
+
+
+
+
+## ## ## ## ## SUBS:
+
diff --git a/challenge-086/colin-crain/perl/ch-2.pl b/challenge-086/colin-crain/perl/ch-2.pl
new file mode 100644
index 0000000000..d846711c61
--- /dev/null
+++ b/challenge-086/colin-crain/perl/ch-2.pl
@@ -0,0 +1,408 @@
+#!/opt/local/bin/perl5.26
+#
+# so-do-you.pl
+#
+# TASK #2 › Sudoku Puzzle
+# Submitted by: Mohammad S Anwar
+# You are given Sudoku puzzle (9x9).
+#
+# Write a script to complete the puzzle and must respect the following rules:
+#
+# a) Each row must have the numbers 1-9 occuring just once.
+# b) Each column must have the numbers 1-9 occuring just once.
+# c) The numbers 1-9 must occur just once in each of the 9 sub-boxes (3x3) of the grid.
+#
+# Example:
+# [ _ _ _ 2 6 _ 7 _ 1 ]
+# [ 6 8 _ _ 7 _ _ 9 _ ]
+# [ 1 9 _ _ _ 4 5 _ _ ]
+# [ 8 2 _ 1 _ _ _ 4 _ ]
+# [ _ _ 4 6 _ 2 9 _ _ ]
+# [ _ 5 _ _ _ 3 _ 2 8 ]
+# [ _ _ 9 3 _ _ _ 7 4 ]
+# [ _ 4 _ _ 5 _ _ 3 6 ]
+# [ 7 _ 3 _ 1 8 _ _ _ ]
+#
+# Output:
+# [ 4 3 5 2 6 9 7 8 1 ]
+# [ 6 8 2 5 7 1 4 9 3 ]
+# [ 1 9 7 8 3 4 5 6 2 ]
+# [ 8 2 6 1 9 5 3 4 7 ]
+# [ 3 7 4 6 8 2 9 1 5 ]
+# [ 9 5 1 7 4 3 6 2 8 ]
+# [ 5 1 9 3 2 6 8 7 4 ]
+# [ 2 4 8 9 5 7 1 3 6 ]
+# [ 7 6 3 4 1 8 2 5 9 ]
+
+#
+# As the above puzzle respect the 3 rules including 9-sub-boxes as shown below:
+#
+# [ 4 3 5 ] [ 2 6 9 ] [ 7 8 1 ]
+# [ 6 8 2 ] [ 5 7 1 ] [ 4 9 3 ]
+# [ 1 9 7 ] [ 8 3 4 ] [ 5 6 2 ]
+#
+# [ 8 2 6 ] [ 1 9 5 ] [ 3 4 7 ]
+# [ 3 7 4 ] [ 6 8 2 ] [ 9 1 5 ]
+# [ 9 5 1 ] [ 7 4 3 ] [ 6 2 8 ]
+#
+# [ 5 1 9 ] [ 3 2 6 ] [ 8 7 4 ]
+# [ 2 4 8 ] [ 9 5 7 ] [ 1 3 6 ]
+# [ 7 6 3 ] [ 4 1 8 ] [ 2 5 9 ]
+#
+# method:
+# Let's just get out in front of things right now and state I've
+# never really pursued Sudoku puzzles. It's odd, because they're
+# exactly the sort of thing I generally like. But as things have
+# worked out, they seem to occupy the same psychic space as chess to
+# me -- something I should do, should be good at, should enjoy --
+# but don't actually do, because I'm doing different things. There's
+# alway only so much time, and I suppose I waste the time I have on other
+# things, like these challenges. ;)
+
+# Consequently, I don't really know "how" to do them. Rather than
+# research, though, I think I'm just going to attack the problem
+# head-on and see where that gets me. Wish me luck.
+
+# ---
+
+# Ok, here goes: to satisfy the conditions each cell has three
+# constraints working on it: that it not reuse a number in its row,
+# nor its column, nor what we shall call its "zone" -- the 3x3
+# quadrant (yes that does appear to be the correct word) it lives
+# in. It seems that if we can keep a tally of digits still available
+# to place in each of these domains we can determine, for each cell,
+# the intersection of these sets, which will presumably be a less
+# complex problem space.
+
+# If any of these subsets only contain one element we can place
+# these into our puzzle and reprocess the data, with a little luck
+# concluding more solitary cell options remaining that can be then
+# filled. Repeat until filled.
+
+# To implement this we build a data structure, a list of three
+# arrays, for rows, columns and zones. The indices in each array
+# apply to the indices in the puzzle, with the zones numbered left
+# to right, top to bottom indexed from 0 as well:
+#
+# 0 | 1 | 2
+# --+---+---
+# 3 | 4 | 5
+# --+---+---
+# 6 | 7 | 8
+#
+# We always keep these and update them together, but it's easier to
+# keep track of them if we give them separate names. They could be
+# in a hash container, with named keys, but that would constanty
+# need to be dereferenced. This is easy and clear. Three arrays, three sets
+# of values.
+
+# We generate this data by looking over the puzzle as completed.
+# Filled cells are noted and removed from the sets. We separate this
+# routine out to call upon as required to update. The list of arrays
+# in returned.
+
+# Once we have the tables of possible values, we can identify the intersection
+# of the three appliciable sets for each unfilled cell in the puzzle. This action
+# will yield a set of possible values for each, which we will put in an
+# array of options in a complementary puzzle.
+
+
+# ---
+
+# This strategy works well for this particular puzzle, but as-is it
+# requires that some options get narrowed to a single choice, which for more
+# complex puzzles is not guaranteed. As I've said I'm not that familiar
+# with sudoku in general, but it seems to me that for sparser grids, logic may only
+# get one so far, and should the most-constrained cell still have two
+# valid choices available one must make a choice and see if it works out, and
+# if not backtrack and try the other.
+
+# ---
+#
+# version 2 implements a recursive backtraking routine, so that if the only
+# way to proceed involves descending mutliple paths it can make choice and try and
+# resolve the puzzle. It seems to work, but needs it's logic unwound next.
+
+#
+# 2020 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+use warnings;
+use strict;
+use feature ":5.26";
+
+use DDP;
+
+## ## ## ## ## MAIN:
+
+
+my $pz = load_puzzle();
+
+$pz = solve_puzzle($pz);
+
+# show_puzzle($pz);
+
+
+
+
+## ## ## ## ## SUBS:
+
+sub load_puzzle {
+## return the puzzle as a 9x9 LoL
+ my @pz;
+ while ( my $line = <DATA> ) {
+ chomp $line;
+ last if $line =~ /^\s*$/;
+ $line =~ /\[\s(.*)\s]/ ;
+ my @data = split /\s/, $1;
+ push @pz, [ map { $_ eq '_' ? undef : $_ } @data ];
+ }
+ return \@pz;
+}
+
+sub solve_puzzle {
+ my $pz = shift;
+
+ show_puzzle($pz);
+
+ my ($rows, $cols, $zones) = get_remaining_digits($pz);
+ # show_rcz($rows, $cols, $zones);
+
+ my ($partial, $single, $solved, $failed) = generate_partial_solution($rows, $cols, $zones, $pz);
+ # show_partial_solution($pz, $partial);
+ return $pz if $solved; ## base case, all cells filled
+ return undef if $failed; ## edge case, failed path, unsolvable
+
+ if ($single) {
+ $pz = add_partials($pz, $partial);
+ return $pz if solve_puzzle($pz);
+ }
+ else {
+ say "guessing...";
+ while ( my ($cell, $values) = get_next_cell($partial) ) {
+ for my $try ( $values->@* ) {
+ $pz->[$cell->[0]][$cell->[1]] = $try;
+ $partial->[$cell->[0]][$cell->[1]] = undef;
+ return $pz if solve_puzzle($pz);
+ }
+ }
+ }
+}
+
+sub get_next_cell {
+## find the next, shortest option set and return data
+ my $partial = shift;
+ for my $len (2..9) { ## length of option list
+ for my $r (0..8) {
+ for my $c (0..8) {
+ say "trying [$r][$c] - $partial->[$r][$c]->@*" if defined $partial->[$r][$c];
+ next if not defined $partial->[$r][$c];
+ if ( scalar $partial->[$r][$c]->@* == $len ) {
+ say "\t\tfound cell len $len coord $r $c $partial->[$r][$c]->@*" ;
+ return ([ $r, $c ], [ $partial->[$r][$c]->@* ]);
+ }
+
+ }
+ }
+ }
+}
+
+sub show_puzzle {
+ my $pz = shift;
+ for my $row ($pz->@*) {
+ say join ' ', map { defined $_ ? $_ : ' ' } $row->@*;
+ }
+ say '';
+}
+
+sub show_rcz {
+## display remaining sets of undeclared numbers from the
+## arrays of rows, columns and zones 0-8
+ my ($rows, $cols, $zones) = @_;
+ say '';
+ say "rows:";
+ say "$_ ", join ', ', sort keys $rows->[$_]->%* for (0..8);
+ say '';
+ say "cols:";
+ say "$_ ", join ', ', sort keys $cols->[$_]->%* for (0..8);
+ say '';
+ say "zones:";
+ say "$_ ", join ', ', sort keys $zones->[$_]->%* for (0..8);
+ say '';
+}
+
+sub show_partial_solution {
+## display the filled cells and the lists of logical options for unfilled
+ my ( $pz, $part ) = @_;
+ for my $r (0..8) {
+ for my $c (0..8) {
+ defined $pz->[$r][$c] ? say "[$c, $r] --> ", $pz->[$r][$c]
+ : say "[$c, $r] --> [$part->[$r][$c]->@*]";
+ }
+ }
+ say '';
+}
+
+sub solved {
+## true if puzzle does not have unfilled cells
+ my $pz = shift;
+ for my $r (0..8) {
+ for my $c (0..8) {
+ return 0 if not defined $pz->[$r][$c];
+ }
+ }
+ return 1;
+}
+
+sub get_remaining_digits {
+## scans puzzle matrix
+## get lists of digits still to be placed in rows, columns and zones
+## returns three arrays of bag hashes for the indices, 0 - 8
+ my $pz = shift;
+
+ my @rows;
+ for my $idx (0..8) {
+ my %placed = map { $_ => undef } grep { defined $_ } $pz->[$idx]->@*;
+ my %hash = map { $_ => undef } grep { ! exists $placed{$_} } (1..9);
+ $rows[$idx] = \%hash;
+ }
+
+ my @cols;
+ for my $idx (0..8) {
+ my %placed = map { $_ => undef } grep { defined $_ } map { $pz->[$_][$idx] } (0..8);
+ my %hash = map { $_ => undef } grep { ! exists $placed{$_} } (1..9);
+ $cols[$idx] = \%hash;
+ }
+
+ my @zones;
+ for my $idx (0..8) {
+ $zones[$idx] = { map { $_ => undef } (1..9) };
+ }
+
+ for my $r (0..8) {
+ for my $c (0..8) {
+ my $zone = (int $r/3) * 3 + int $c/3;
+ my $value = $pz->[$r][$c];
+ next if not defined $value;
+ delete $zones[$zone]{$value};
+ }
+ }
+
+ return (\@rows, \@cols, \@zones);
+}
+
+sub generate_partial_solution {
+## given puzzle, remainder sets
+## calculates the intersection between row, column and zone for unfilled cells
+## returns complementary puzzle of arrays of possible values in unfilled cells
+## reports if any cell has only one option available
+ my ($rows, $cols, $zones, $pz) = @_;
+ my $partial;
+ my $single = 0;
+ my $solved = 1;
+ my $failed = 0;
+
+ for my $r (0..8) {
+ for my $c (0..8) {
+ next if defined $pz->[$r][$c];
+ $solved = 0;
+ my @possible = ();
+ my $z = (int $r/3) * 3 + int $c/3; ## z equation
+ for my $digit ( sort keys $zones->[$z]->%* ) {
+ if ( exists $rows->[$r]->{$digit}
+ && exists $cols->[$c]->{$digit}) {
+ push @possible, $digit;
+ }
+ }
+ $partial->[$r][$c] = [ @possible ] ;
+ $failed = 1 if scalar @possible == 0;
+ $single = 1 if scalar @possible == 1;
+ }
+ }
+ return ($partial, $single, $solved, $failed);
+}
+
+sub add_partialsX {
+## given a puzzle and a partial solution
+## combines singleton possibilities to puzzle
+## returns new puzzle
+
+ my ($pz, $part) = @_;
+ my $new;
+
+ for my $r (0..8) {
+ for my $c (0..8) {
+ if (defined $pz->[$r][$c]) {
+ $new->[$r][$c] = $pz->[$r][$c];
+ }
+ elsif (scalar($part->[$r][$c]->@*) == 1) {
+ $new->[$r][$c] = $part->[$r][$c][0];
+ }
+ }
+ }
+ return $new;
+
+
+}
+
+sub add_partials {
+## given a puzzle and a partial solution
+## combines singleton possibilities to puzzle
+## returns new puzzle
+
+ my ($pz, $part) = @_;
+ my $new;
+
+ for my $r (0..8) {
+ for my $c (0..8) {
+ if (defined $pz->[$r][$c]) {
+ $new->[$r][$c] = $pz->[$r][$c];
+ }
+ elsif (scalar($part->[$r][$c]->@*) == 1) {
+ $new->[$r][$c] = $part->[$r][$c][0];
+ }
+ }
+ }
+ return $new;
+
+
+}
+
+## example
+# [ _ _ _ 2 6 _ 7 _ 1 ]
+# [ 6 8 _ _ 7 _ _ 9 _ ]
+# [ 1 9 _ _ _ 4 5 _ _ ]
+# [ 8 2 _ 1 _ _ _ 4 _ ]
+# [ _ _ 4 6 _ 2 9 _ _ ]
+# [ _ 5 _ _ _ 3 _ 2 8 ]
+# [ _ _ 9 3 _ _ _ 7 4 ]
+# [ _ 4 _ _ 5 _ _ 3 6 ]
+# [ 7 _ 3 _ 1 8 _ _ _ ]
+
+
+
+## too sparse- caught in loop? might be simple.
+# [ _ _ _ 2 _ _ _ _ _ ]
+# [ 6 8 _ _ _ _ _ _ _ ]
+# [ 1 9 _ _ _ _ _ _ _ ]
+# [ 8 2 _ 1 _ _ _ _ _ ]
+# [ _ _ 4 6 _ _ _ _ _ ]
+# [ _ 5 _ _ _ _ _ _ _ ]
+# [ _ _ 9 3 _ _ _ _ _ ]
+# [ _ 4 _ _ _ _ _ _ _ ]
+# [ 7 _ 3 _ _ _ _ _ _ ]
+
+
+## requires backtracking:
+__DATA__
+[ _ _ _ 2 6 _ _ _ 1 ]
+[ 6 8 _ _ 7 _ _ 9 _ ]
+[ 1 9 _ _ _ 4 _ _ _ ]
+[ 8 2 _ 1 _ _ _ 4 _ ]
+[ _ _ 4 6 _ 2 _ _ _ ]
+[ _ 5 _ _ _ 3 _ 2 8 ]
+[ _ _ 9 3 _ _ _ 7 4 ]
+[ _ 4 _ _ 5 _ _ 3 6 ]
+[ 7 _ 3 _ 1 8 _ _ _ ]
diff --git a/challenge-086/colin-crain/raku/ch-1.raku b/challenge-086/colin-crain/raku/ch-1.raku
new file mode 100644
index 0000000000..5916d202ea
--- /dev/null
+++ b/challenge-086/colin-crain/raku/ch-1.raku
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl6
+#
+#
+# difference-engine.raku
+#
+#
+#
+# 2020 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+unit sub MAIN (Int $target = 100, *@input) ;
+
+@input.elems == 0 and @input = 100, 25, 15, 0 , -1, -2, -100;
+
+say @input .sort
+ .combinations(2)
+ .map({$_[1]-$_[0]})
+ .grep({$_ == $target.abs})
+ .elems ?? 1
+ !! 0;
diff --git a/stats/pwc-current.json b/stats/pwc-current.json
index fd83ac5761..d45488012f 100644
--- a/stats/pwc-current.json
+++ b/stats/pwc-current.json
@@ -1,13 +1,43 @@
{
+ "plotOptions" : {
+ "series" : {
+ "dataLabels" : {
+ "enabled" : 1,
+ "format" : "{point.y}"
+ },
+ "borderWidth" : 0
+ }
+ },
+ "yAxis" : {
+ "title" : {
+ "text" : "Total Solutions"
+ }
+ },
"legend" : {
"enabled" : 0
},
"title" : {
"text" : "Perl Weekly Challenge - 086"
},
+ "chart" : {
+ "type" : "column"
+ },
+ "xAxis" : {
+ "type" : "category"
+ },
+ "subtitle" : {
+ "text" : "[Champions: 35] Last updated at 2020-11-16 04:53:42 GMT"
+ },
+ "tooltip" : {
+ "followPointer" : 1,
+ "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>",
+ "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>"
+ },
"drilldown" : {
"series" : [
{
+ "name" : "Abigail",
+ "id" : "Abigail",
"data" : [
[
"Perl",
@@ -17,13 +47,9 @@
"Blog",
2
]
- ],
- "id" : "Abigail",
- "name" : "Abigail"
+ ]
},
{
- "name" : "Adam Russell",
- "id" : "Adam Russell",
"data" : [
[
"Perl",
@@ -33,7 +59,9 @@
"Blog",
2
]
- ]
+ ],
+ "name" : "Adam Russell",
+ "id" : "Adam Russell"
},
{
"data" : [
@@ -47,6 +75,7 @@
},
{
"name" : "Andinus",
+ "id" : "Andinus",
"data" : [
[
"Perl",
@@ -56,22 +85,19 @@
"Blog",
1
]
- ],
- "id" : "Andinus"
+ ]
},
{
+ "name" : "Andrew Shitov",
"id" : "Andrew Shitov",
"data" : [
[
"Raku",
1
]
- ],
- "name" : "Andrew Shitov"
+ ]
},
{
- "name" : "Arne Sommer",
- "id" : "Arne Sommer",
"data" : [
[
"Perl",
@@ -85,9 +111,12 @@
"Blog",
1
]
- ]
+ ],
+ "name" : "Arne Sommer",
+ "id" : "Arne Sommer"
},
{
+ "id" : "Athanasius",
"name" : "Athanasius",
"data" : [
[
@@ -98,11 +127,9 @@
"Raku",
2
]
- ],
- "id" : "Athanasius"
+ ]
},
{
- "name" : "Cheok-Yin Fung",
"data" : [
[
"Perl",
@@ -113,47 +140,62 @@
1
]
],
- "id" : "Cheok-Yin Fung"
+ "id" : "Cheok-Yin Fung",
+ "name" : "Cheok-Yin Fung"
+ },
+ {
+ "id" : "Colin Crain",
+ "name" : "Colin Crain",
+ "data" : [
+ [
+ "Perl",
+ 2
+ ],
+ [
+ "Raku",
+ 1
+ ]
+ ]
},
{
- "id" : "Cristina Heredia",
"data" : [
[
"Perl",
1
]
],
- "name" : "Cristina Heredia"
+ "name" : "Cristina Heredia",
+ "id" : "Cristina Heredia"
},
{
+ "name" : "Daniel Bowling",
+ "id" : "Daniel Bowling",
"data" : [
[
"Raku",
1
]
- ],
- "id" : "Daniel Bowling",
- "name" : "Daniel Bowling"
+ ]
},
{
- "name" : "Dave Jacoby",
"data" : [
[
"Perl",
2
]
],
- "id" : "Dave Jacoby"
+ "id" : "Dave Jacoby",
+ "name" : "Dave Jacoby"
},
{
+ "name" : "E. Choroba",
"id" : "E. Choroba",
"data" : [
[
"Perl",
2
]
- ],
- "name" : "E. Choroba"
+ ]
},
{
"name" : "Feng Chang",
@@ -166,7 +208,6 @@
]
},
{
- "name" : "Flavio Poletti",
"data" : [
[
"Perl",
@@ -177,27 +218,28 @@
2
]
],
+ "name" : "Flavio Poletti",
"id" : "Flavio Poletti"
},
{
- "name" : "Jan Krnavek",
"data" : [
[
"Raku",
1
]
],
+ "name" : "Jan Krnavek",
"id" : "Jan Krnavek"
},
{
- "id" : "Jorg Sommrey",
"data" : [
[
"Perl",
2
]
],
- "name" : "Jorg Sommrey"
+ "name" : "Jorg Sommrey",
+ "id" : "Jorg Sommrey"
},
{
"data" : [
@@ -214,27 +256,28 @@
"name" : "Julio de Castro"
},
{
+ "id" : "Kai Burgdorf",
"name" : "Kai Burgdorf",
"data" : [
[
"Perl",
2
]
- ],
- "id" : "Kai Burgdorf"
+ ]
},
{
"id" : "Kang-min Liu",
+ "name" : "Kang-min Liu",
"data" : [
[
"Raku",
2
]
- ],
- "name" : "Kang-min Liu"
+ ]
},
{
"name" : "Laurent Rosenfeld",
+ "id" : "Laurent Rosenfeld",
"data" : [
[
"Perl",
@@ -248,18 +291,17 @@
"Blog",
1
]
- ],
- "id" : "Laurent Rosenfeld"
+ ]
},
{
+ "name" : "Lubos Kolouch",
+ "id" : "Lubos Kolouch",
"data" : [
[
"Perl",
2
]
- ],
- "id" : "Lubos Kolouch",
- "name" : "Lubos Kolouch"
+ ]
},
{
"data" : [
@@ -272,7 +314,6 @@
"name" : "Mark Anderson"
},
{
- "name" : "Myoungjin Jeon",
"data" : [
[
"Perl",
@@ -287,7 +328,8 @@
1
]
],
- "id" : "Myoungjin Jeon"
+ "id" : "Myoungjin Jeon",
+ "name" : "Myoungjin Jeon"
},
{
"data" : [
@@ -300,14 +342,14 @@
"name" : "Nuno Vieira"
},
{
+ "name" : "Philip Hood",
"id" : "Philip Hood",
"data" : [
[
"Raku",
2
]
- ],
- "name" : "Philip Hood"
+ ]
},
{
"name" : "Roger Bell_West",
@@ -334,11 +376,10 @@
2
]
],
- "id" : "Shawn Wagner",
- "name" : "Shawn Wagner"
+ "name" : "Shawn Wagner",
+ "id" : "Shawn Wagner"
},
{
- "id" : "Simon Green",
"data" : [
[
"Perl",
@@ -349,40 +390,42 @@
1
]
],
+ "id" : "Simon Green",
"name" : "Simon Green"
},
{
- "id" : "Simon Proctor",
"data" : [
[
"Raku",
2
]
],
+ "id" : "Simon Proctor",
"name" : "Simon Proctor"
},
{
+ "name" : "Stuart Little",
+ "id" : "Stuart Little",
"data" : [
[
"Raku",
2
]
- ],
- "id" : "Stuart Little",
- "name" : "Stuart Little"
+ ]
},
{
- "id" : "Tejas",
"data" : [
[
"Perl",
2
]
],
- "name" : "Tejas"
+ "name" : "Tejas",
+ "id" : "Tejas"
},
{
"id" : "Ulrich Rieke",
+ "name" : "Ulrich Rieke",
"data" : [
[
"Perl",
@@ -392,74 +435,79 @@
"Raku",
1
]
- ],
- "name" : "Ulrich Rieke"
+ ]
},
{
- "name" : "Walt Mankowski",
- "id" : "Walt Mankowski",
"data" : [
[
"Perl",
2
]
- ]
+ ],
+ "id" : "Walt Mankowski",
+ "name" : "Walt Mankowski"
},
{
+ "id" : "Wanderdoc",
+ "name" : "Wanderdoc",
"data" : [
[
"Perl",
2
]
- ],
- "id" : "Wanderdoc",
- "name" : "Wanderdoc"
+ ]
}
]
},
"series" : [
{
+ "name" : "Perl Weekly Challenge - 086",
"colorByPoint" : 1,
"data" : [
{
+ "drilldown" : "Abigail",
"y" : 4,
- "name" : "Abigail",
- "drilldown" : "Abigail"
+ "name" : "Abigail"
},
{
- "y" : 3,
+ "drilldown" : "Adam Russell",
"name" : "Adam Russell",
- "drilldown" : "Adam Russell"
+ "y" : 3
},
{
- "drilldown" : "Alexander Pankoff",
+ "y" : 2,
"name" : "Alexander Pankoff",
- "y" : 2
+ "drilldown" : "Alexander Pankoff"
},
{
"y" : 2,
- "drilldown" : "Andinus",
- "name" : "Andinus"
+ "name" : "Andinus",
+ "drilldown" : "Andinus"
},
{
- "name" : "Andrew Shitov",
"drilldown" : "Andrew Shitov",
+ "name" : "Andrew Shitov",
"y" : 1
},
{
- "name" : "Arne Sommer",
"drilldown" : "Arne Sommer",
- "y" : 5
+ "y" : 5,
+ "name" : "Arne Sommer"
},
{
"y" : 4,
- "drilldown" : "Athanasius",
- "name" : "Athanasius"
+ "name" : "Athanasius",
+ "drilldown" : "Athanasius"
},
{
- "drilldown" : "Cheok-Yin Fung",
+ "y" : 3,
"name" : "Cheok-Yin Fung",
- "y" : 3
+ "drilldown" : "Cheok-Yin Fung"
+ },
+ {
+ "drilldown" : "Colin Crain",
+ "y" : 3,
+ "name" : "Colin Crain"
},
{
"drilldown" : "Cristina Heredia",
@@ -467,38 +515,38 @@
"y" : 1
},
{
+ "y" : 1,
"name" : "Daniel Bowling",
- "drilldown" : "Daniel Bowling",
- "y" : 1
+ "drilldown" : "Daniel Bowling"
},