diff options
| -rw-r--r-- | challenge-086/colin-crain/perl/ch-1.pl | 92 | ||||
| -rw-r--r-- | challenge-086/colin-crain/perl/ch-2.pl | 408 | ||||
| -rw-r--r-- | challenge-086/colin-crain/raku/ch-1.raku | 22 | ||||
| -rw-r--r-- | stats/pwc-current.json | 309 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 72 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 1270 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 750 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 28 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 116 | ||||
| -rw-r--r-- | stats/pwc-summary-151-180.json | 94 | ||||
| -rw-r--r-- | stats/pwc-summary-181-210.json | 38 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 52 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 98 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 48 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 40 |
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" }, |
