aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-07-18 21:11:02 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-07-18 21:11:02 +0100
commitdf4cf0dec3295559d5a1053c6a82081cebbedf50 (patch)
treebf7a17fc908c308de06890994cc3d46cd47d5c95
parentf42dc508d4ece156ce9d3df05ace5334fdd44069 (diff)
downloadperlweeklychallenge-club-df4cf0dec3295559d5a1053c6a82081cebbedf50.tar.gz
perlweeklychallenge-club-df4cf0dec3295559d5a1053c6a82081cebbedf50.tar.bz2
perlweeklychallenge-club-df4cf0dec3295559d5a1053c6a82081cebbedf50.zip
- Added solutions by Colin Crain.
-rw-r--r--challenge-121/colin-crain/blog.txt1
-rw-r--r--challenge-121/colin-crain/perl/ch-1.pl47
-rw-r--r--challenge-121/colin-crain/perl/ch-2.pl352
-rw-r--r--challenge-121/colin-crain/raku/ch-1.raku16
-rw-r--r--challenge-121/colin-crain/raku/ch-2.raku43
-rw-r--r--stats/pwc-current.json435
-rw-r--r--stats/pwc-language-breakdown-summary.json54
-rw-r--r--stats/pwc-language-breakdown.json1624
-rw-r--r--stats/pwc-leaders.json716
-rw-r--r--stats/pwc-summary-1-30.json46
-rw-r--r--stats/pwc-summary-121-150.json46
-rw-r--r--stats/pwc-summary-151-180.json50
-rw-r--r--stats/pwc-summary-181-210.json56
-rw-r--r--stats/pwc-summary-211-240.json96
-rw-r--r--stats/pwc-summary-31-60.json112
-rw-r--r--stats/pwc-summary-61-90.json126
-rw-r--r--stats/pwc-summary-91-120.json120
-rw-r--r--stats/pwc-summary.json40
18 files changed, 2231 insertions, 1749 deletions
diff --git a/challenge-121/colin-crain/blog.txt b/challenge-121/colin-crain/blog.txt
new file mode 100644
index 0000000000..fd3f82c9fd
--- /dev/null
+++ b/challenge-121/colin-crain/blog.txt
@@ -0,0 +1 @@
+https://colincrain.com/2021/07/18/mr-brush-man-that-ones-upside-down/
diff --git a/challenge-121/colin-crain/perl/ch-1.pl b/challenge-121/colin-crain/perl/ch-1.pl
new file mode 100644
index 0000000000..bf38d9da03
--- /dev/null
+++ b/challenge-121/colin-crain/perl/ch-1.pl
@@ -0,0 +1,47 @@
+#!/Users/colincrain/perl5/perlbrew/perls/perl-5.32.0/bin/perl
+#
+# that-ones-upside-down.pl
+#
+# Invert Bit
+# Submitted by: Mohammad S Anwar
+# You are given integers 0 <= $m <= 255 and 1 <= $n <= 8.
+#
+# Write a script to invert $n bit from the end of the binary
+# representation of $m and print the decimal representation of the new
+# binary number.
+#
+# Example
+# Input: $m = 12, $n = 3
+# Output: 8
+#
+# Binary representation of $m = 00001100
+# Invert 3rd bit from the end = 00001000
+# Decimal equivalent of 00001000 = 8
+#
+# Input $m = 18, $n = 4
+# Output: 26
+#
+# Binary representation of $m = 00010010
+# Invert 4th bit from the end = 00011010
+# Decimal equivalent of 00011010 = 26
+#
+# © 2021 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+use warnings;
+use strict;
+use utf8;
+use feature ":5.26";
+use feature qw(signatures);
+no warnings 'experimental::signatures';
+
+
+@ARGV = ( 18, 4 );
+
+say $ARGV[0] ^ (2 ** ($ARGV[1]-1));
+
+
+
+
diff --git a/challenge-121/colin-crain/perl/ch-2.pl b/challenge-121/colin-crain/perl/ch-2.pl
new file mode 100644
index 0000000000..c837f566c9
--- /dev/null
+++ b/challenge-121/colin-crain/perl/ch-2.pl
@@ -0,0 +1,352 @@
+#!/Users/colincrain/perl5/perlbrew/perls/perl-5.32.0/bin/perl
+#
+# door-to-door.pl
+#
+# The Travelling Salesman
+# Submitted by: Jorg Sommrey
+# You are given a NxN matrix containing the distances between N cities.
+#
+# Write a script to find a round trip of minimum length visiting all N
+# cities exactly once and returning to the start.
+#
+# Example
+# Matrix: [0, 5, 2, 7]
+# [5, 0, 5, 3]
+# [3, 1, 0, 6]
+# [4, 5, 4, 0]
+#
+# Output:
+# length = 10
+# tour = (0 2 1 3 0)
+#
+# BONUS 1: For a given number N, create a random NxN distance matrix and
+# find a solution for this matrix.
+#
+# BONUS 2: Find a solution for a random matrix of size 15x15 or 20x20
+#
+# © 2021 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+use warnings;
+use strict;
+use utf8;
+use feature ":5.26";
+use feature qw(signatures);
+no warnings 'experimental::signatures';
+use Algorithm::Combinatorics qw( permutations );
+use List::Util qw( min first );
+
+# srand(1234567890);
+
+my $mat = [
+ [0, 5, 2, 7],
+ [5, 0, 5, 3],
+ [3, 1, 0, 6],
+ [4, 5, 4, 0]
+];
+
+
+## uncomment to produce random asymmetrical matrix
+
+$mat = rand_amat(8);
+print_mat( $mat );
+
+
+say '';
+
+my ($min, $path);
+
+($min, $path) = exact_ts( $mat );
+say '';
+say 'exact:';
+say "\tmin dist $min";
+say "\ttour $path->@*";
+
+($min, $path) = nn_bidirectional_ts( $mat );
+say '';
+say 'nearest neighbor bidirectional:';
+say "\tmin dist $min";
+say "\ttour $path->@*";
+
+
+($min, $path) = nn_ts( $mat );
+say '';
+say 'nearest neighbor:';
+say "\tmin dist $min";
+say "\ttour $path->@*";
+
+
+($min, $path) = insert_ts( $mat );
+say '';
+say 'nearest insertion:';
+say "\tmin dist $min";
+say "\ttour $path->@*";
+
+
+
+sub exact_ts ($mat) {
+## naive exact implementation permuting and summing all possibilities. Only
+## useful for smaller values of N, up to about 12
+ return (0, []) if $mat->@* > 12;
+
+ ## metainfo about matrix
+ my %stats;
+
+ ## starting city is at index 0
+ my $start = $mat->[0];
+
+ ## permute cities other than start city by index
+ my $iter = permutations( [0..scalar $mat->@*-2] );
+ my $dist;
+ my $sp;
+ my $min = "Inf";
+ while ( my $p = $iter->next ) {
+
+ ## from start to first city
+ $dist = $start->[ $p->[0]+1 ];
+
+ ## loop through permutation of cities
+ for my $i (0..$p->@*-2) {
+ $dist += $mat->[ $p->[$i]+1 ][ $p->[$i+1]+1 ];
+ }
+
+ ## return to start
+ $dist += $mat->[ $p->[ $p->@*-1 ]+1 ][ 0 ]; ## back to start
+
+ if ( $dist < $min ) {
+ $sp = $p;
+ $min = $dist;
+ }
+ }
+
+ ## append and prepend 0 index to tour for completeness
+ my $path = [ 0, (map { $_ + 1 } $sp->@*), 0 ];
+ return ($min, $path);
+}
+
+sub nn_ts ($mat) {
+## a nearest-neighbor heuristic
+## as the graph is asymmetrical, we start at the shortest arc to ensure using it. Every
+## tour visits every city, but only use 1/2 of the arcs to complete a the specific path
+## in the direction chosen.
+
+ ## create a list of unvisited cities
+ my %cities = map { $_ => 1 } keys $mat->@*;
+
+ ## starting city holds shortest arc
+ my ($start, $dist) = (0, "Inf");
+ my @mins = map { my $idx = $_; min grep { $_ > 0 } ( $idx->@* ) } $mat->@*;
+ while ( my ($k, $v) = each @mins ) {
+ ($start, $dist) = ($k, $v) if $v < $dist;
+ }
+ my $city = first { $mat->[$start][$_] == $dist }
+ (0..$mat->[$start]->@* - 1);
+
+ ## start building the shortest path and removing visited cities from options
+ my @sp = ( $start, $city );
+ delete @cities{ @sp };
+
+ while (scalar keys %cities) {
+ my $min = min( map { $mat->[$city][$_] } keys %cities );
+ my $next = first { $mat->[$city][$_] == $min }
+ grep { exists $cities{$_} } (0..$mat->[$city]->@* - 1);
+
+ $dist += $min;
+ push @sp, $next;
+ delete $cities{ "$next" };
+ $city = $next;
+
+ }
+
+ ## link back to base, rotate and return
+ $dist += $mat->[$city][$start];
+ while ( $sp[0] ) { push @sp, shift @sp };
+ return ( $dist, [ @sp, 0 ] );
+}
+
+sub nn_bidirectional_ts ($mat) {
+## a nearest-neighbor heuristic
+## bidirectional growth from both ends of the partial tour, selecting the
+## best next step
+
+ ## create a list of unvisited cities
+ my %cities = map { $_ => 1 } keys $mat->@*;
+
+ ## starting city holds shortest arc
+ my ($start, $dist) = (0, "Inf");
+ my @mins = map { my $idx = $_; min grep { $_ > 0 } ( $idx->@* ) } $mat->@*;
+ while ( my ($k, $v) = each @mins ) {
+ ($start, $dist) = ($k, $v) if $v < $dist;
+ }
+ my $city = first { $mat->[$start][$_] == $dist }
+ (0..$mat->[$start]->@* - 1);
+
+ ## start building the shortest path and removing visited cities from options
+ my @sp = ( $start, $city );
+ delete @cities{ @sp };
+
+ while (scalar keys %cities) {
+ my $min_end = min( map { $mat->[$city][$_] } keys %cities );
+ my $next_end = first { $mat->[$city][$_] == $min_end }
+ grep { exists $cities{$_} } (0..$mat->[$city]->@* - 1);
+
+ my $min_start = min( map { $mat->[$_][$start] } keys %cities );
+ my $next_start = first { $mat->[$_][$start] == $min_start }
+ grep { exists $cities{$_} } (0..$mat->[$city]->@* - 1);
+
+ if ($min_start < $min_end) {
+ $dist += $min_start;
+
+ unshift @sp, $next_start;
+
+ delete $cities{ "$next_start" };
+ $start = $next_start;
+ }
+ else {
+ $dist += $min_end;
+
+ push @sp, $next_end;
+
+ delete $cities{ "$next_end" };
+ $city = $next_end;
+ }
+ }
+
+ ## link back to base, rotate and return
+ $dist += $mat->[$city][$start];
+ while ( $sp[0] ) { push @sp, shift @sp };
+ return ( $dist, [ @sp, 0 ] );
+}
+
+
+sub insert_ts ($mat) {
+## an insertion heuristic
+## an original amalgamation of several insertion algorithms
+
+ ## some generic containers we'll be reusing
+ my ($city, $dist);
+
+ ## create a list of indexes of unvisited cities
+ my %cities = map { $_ => 1 } keys $mat->@*;
+
+ ## starting city holds shortest arc
+ my ($start, $end);
+ $dist = "Inf";
+ my @mins = map { my $idx = $_; min grep { $_ > 0 } ( $idx->@* ) }
+ $mat->@*;
+ while ( my ($k, $v) = each @mins ) {
+ ($start, $dist) = ($k, $v) if $v < $dist;
+ }
+ $end = first { $mat->[$start][$_] == $dist }
+ (0..$mat->[$start]->@* - 1);
+ delete @cities{ $start, $end };
+
+ ## find the city that minimizes the distance from the tour end
+ ## to the new city and back to the start, to form a triangle
+ ## tried min and max, this seems slightly better. Should, in an
+ ## asymmetric matrix, perhaps be closest to the mean.
+ $dist = "Inf";
+ for (sort keys %cities) {
+
+ my $d = $mat->[$end][$_] + $mat->[$_][$start];
+
+ ($city, $dist) = ($_, $d) if $d < $dist;
+ }
+ delete $cities{ $city };
+
+ ## establish the working subtour
+ my @tour = ( $start, $end, $city, $start );
+
+ my $pick;
+ while ( keys %cities ) {
+ ## find the city with the shortest insertion
+ for $city ( sort keys %cities ) {
+ for my $start_index (0..@tour-2) {
+ my $d = min ( $mat->[$start_index][$city], $mat->[$city][$start_index+1] );
+ if ($d < $min) {
+ $pick = $city;
+ }
+ }
+ }
+
+ ## find the best insert point
+ my @best = (undef, undef, "Inf"); #( city, $insert position, distance );
+ for my $start_index (0..@tour-2) {
+ my $cost = $mat->[$start_index][$pick]
+ + $mat->[$pick][$start_index+1]
+ - $mat->[ $tour[$start_index] ][ $tour[$start_index+1] ];
+ if ($cost < $best[2]) {
+ @best = ( $pick, $start_index, $cost );
+ }
+ }
+
+ ## and insert it into the tour after the start index
+ splice @tour, $best[1]+1, 0, $best[0];
+ delete $cities{ $best[0] };
+ }
+
+ pop @tour;
+ while ( $tour[0] ) { push @tour, shift @tour };
+ push @tour, 0;
+
+ $dist = 0;
+ for my $i ( 0..@tour-2 ) {
+ $dist += $mat->[ $tour[$i] ][ $tour[$i+1] ]
+ }
+
+ return ($dist, \@tour);
+}
+
+## ## ## matrix construction functions
+
+
+sub rand_amat ($size) {
+## create a random asymmetric distance matrix of size $size
+## for arcs of a complete graph
+
+ $size -= 1;
+ my @mat;
+
+ for (0..$size) {
+ my @row;
+ push @row, int( rand($size*$size/2) + 1 ) for (0..$size);
+ $row[$_] = 0;
+ push @mat, \@row;
+ }
+
+ return \@mat;
+}
+
+sub rand_smat ($size) {
+## create a random symmetric distance matrix of size $size
+## for arcs of a complete graph
+
+ $size -= 1;
+ my @mat;
+
+ for my $i (0..$size) {
+ for my $j ($i..$size) {
+ if ($i == $j) {
+ $mat[$i][$j] = 0;
+ next;
+ }
+ $mat[$i][$j] = $mat[$j][$i] = int( rand($size*$size) + 1 )
+ }
+ }
+
+ return \@mat;
+}
+
+
+sub print_mat ($mat, $width = 5) {
+## print matrix allowing space $width chars wide per element
+ say '';
+
+ my $format = ("%${width}d" x scalar $mat->@*) . "\n";
+ for my $row ($mat->@*) {
+ printf $format, $row->@*;
+ }
+
+}
diff --git a/challenge-121/colin-crain/raku/ch-1.raku b/challenge-121/colin-crain/raku/ch-1.raku
new file mode 100644
index 0000000000..8adb8a7283
--- /dev/null
+++ b/challenge-121/colin-crain/raku/ch-1.raku
@@ -0,0 +1,16 @@
+#!/usr/bin/env perl6
+#
+#
+# 121-that-ones-upside-down.raku
+#
+#
+#
+# © 2021 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+unit sub MAIN ( Int $num, Int $pos ) ;
+
+
+say $num +^ 2**($pos-1);
diff --git a/challenge-121/colin-crain/raku/ch-2.raku b/challenge-121/colin-crain/raku/ch-2.raku
new file mode 100644
index 0000000000..622fcb99ad
--- /dev/null
+++ b/challenge-121/colin-crain/raku/ch-2.raku
@@ -0,0 +1,43 @@
+#!/usr/bin/env perl6
+#
+#
+# avon-calling.raku
+#
+#
+#
+# © 2021 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+unit sub MAIN () ;
+
+my @mat = [0, 5, 2, 7],
+ [5, 0, 5, 3],
+ [3, 1, 0, 6],
+ [4, 5, 4, 0];
+
+my $dist;
+my @sp;
+my $min = ∞ ;
+
+for (1..@mat.elems-1).permutations -> @p {
+
+ $dist = @mat[0][ @p[0] ]; ## start leg
+
+ for 0..@p.elems-2 -> $i { ## city-to-city
+ $dist += @mat[ @p[$i] ][ @p[$i+1] ];
+ }
+
+ $dist += @mat[ @p[*-1] ][ 0 ]; ## return leg
+
+ if $dist < $min {
+ @sp = @p;
+ $min = $dist;
+ }
+}
+
+say $_ for @mat;
+say '';
+say "shortest path $min";
+say "path: ", (0, |@sp, 0).join: ' → '
diff --git a/stats/pwc-current.json b/stats/pwc-current.json
index 314a177fc0..482f8b3608 100644
--- a/stats/pwc-current.json
+++ b/stats/pwc-current.json
@@ -1,150 +1,4 @@
{
- "series" : [
- {
- "data" : [
- {
- "drilldown" : "Abigail",
- "y" : 4,
- "name" : "Abigail"
- },
- {
- "drilldown" : "Adam Russell",
- "name" : "Adam Russell",
- "y" : 4
- },
- {
- "drilldown" : "Athanasius",
- "name" : "Athanasius",
- "y" : 2
- },
- {
- "name" : "Cheok-Yin Fung",
- "y" : 2,
- "drilldown" : "Cheok-Yin Fung"
- },
- {
- "name" : "Cristina Heredia",
- "y" : 1,
- "drilldown" : "Cristina Heredia"
- },
- {
- "name" : "Dave Jacoby",
- "y" : 3,
- "drilldown" : "Dave Jacoby"
- },
- {
- "drilldown" : "E. Choroba",
- "name" : "E. Choroba",
- "y" : 2
- },
- {
- "name" : "Flavio Poletti",
- "y" : 6,
- "drilldown" : "Flavio Poletti"
- },
- {
- "drilldown" : "James Smith",
- "name" : "James Smith",
- "y" : 3
- },
- {
- "y" : 2,
- "name" : "Jan Krnavek",
- "drilldown" : "Jan Krnavek"
- },
- {
- "y" : 1,
- "name" : "jdos22",
- "drilldown" : "jdos22"
- },
- {
- "name" : "Jorg Sommrey",
- "y" : 2,
- "drilldown" : "Jorg Sommrey"
- },
- {
- "drilldown" : "Lance Wicks",
- "name" : "Lance Wicks",
- "y" : 2
- },
- {
- "name" : "Laurent Rosenfeld",
- "y" : 3,
- "drilldown" : "Laurent Rosenfeld"
- },
- {
- "name" : "Lubos Kolouch",
- "y" : 1,
- "drilldown" : "Lubos Kolouch"
- },
- {
- "drilldown" : "Luca Ferrari",
- "name" : "Luca Ferrari",
- "y" : 4
- },
- {
- "drilldown" : "Lucas Ransan",
- "y" : 2,
- "name" : "Lucas Ransan"
- },
- {
- "y" : 2,
- "name" : "Mark Anderson",
- "drilldown" : "Mark Anderson"
- },
- {
- "drilldown" : "Mohammad S Anwar",
- "name" : "Mohammad S Anwar",
- "y" : 1
- },
- {
- "drilldown" : "Niels van Dijke",
- "name" : "Niels van Dijke",
- "y" : 2
- },
- {
- "name" : "Paulo Custodio",
- "y" : 2,
- "drilldown" : "Paulo Custodio"
- },
- {
- "drilldown" : "Pete Houston",
- "y" : 2,
- "name" : "Pete Houston"
- },
- {
- "drilldown" : "Roger Bell_West",
- "y" : 4,
- "name" : "Roger Bell_West"
- },
- {
- "drilldown" : "Simon Proctor",
- "y" : 1,
- "name" : "Simon Proctor"
- },
- {
- "y" : 4,
- "name" : "Stuart Little",
- "drilldown" : "Stuart Little"
- },
- {
- "drilldown" : "Ulrich Rieke",
- "y" : 2,
- "name" : "Ulrich Rieke"
- },
- {
- "drilldown" : "W. Luis Mochan",
- "name" : "W. Luis Mochan",
- "y" : 3
- }
- ],
- "name" : "The Weekly Challenge - 121",
- "colorByPoint" : 1
- }
- ],
- "subtitle" : {
- "text" : "[Champions: 27] Last updated at 2021-07-18 19:54:13 GMT"
- },
"plotOptions" : {
"series" : {
"borderWidth" : 0,
@@ -154,20 +8,32 @@
}
}
},
+ "legend" : {
+ "enabled" : 0
+ },
"xAxis" : {
"type" : "category"
},
+ "subtitle" : {
+ "text" : "[Champions: 28] Last updated at 2021-07-18 20:10:48 GMT"
+ },
+ "title" : {
+ "text" : "The Weekly Challenge - 121"
+ },
+ "yAxis" : {
+ "title" : {
+ "text" : "Total Solutions"
+ }
+ },
"tooltip" : {
"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/>",
- "followPointer" : 1
- },
- "chart" : {
- "type" : "column"
+ "followPointer" : 1,
+ "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>"
},
"drilldown" : {
"series" : [
{
+ "name" : "Abigail",
"data" : [
[
"Perl",
@@ -178,10 +44,11 @@
2
]
],
- "name" : "Abigail",
"id" : "Abigail"
},
{
+ "id" : "Adam Russell",
+ "name" : "Adam Russell",
"data" : [
[
"Perl",
@@ -191,12 +58,10 @@
"Blog",
2
]
- ],
- "name" : "Adam Russell",
- "id" : "Adam Russell"
+ ]
},
{
- "name" : "Athanasius",
+ "id" : "Athanasius",
"data" : [
[
"Perl",
@@ -207,29 +72,48 @@
1
]
],
- "id" : "Athanasius"
+ "name" : "Athanasius"
},
{
- "id" : "Cheok-Yin Fung",
+ "name" : "Cheok-Yin Fung",
"data" : [
[
"Perl",
2
]
],
- "name" : "Cheok-Yin Fung"
+ "id" : "Cheok-Yin Fung"
+ },
+ {
+ "name" : "Colin Crain",
+ "data" : [
+ [
+ "Perl",
+ 2
+ ],
+ [
+ "Raku",
+ 2
+ ],
+ [
+ "Blog",
+ 1
+ ]
+ ],
+ "id" : "Colin Crain"
},
{
- "id" : "Cristina Heredia",
"name" : "Cristina Heredia",
"data" : [
[
"Perl",
1
]
- ]
+ ],
+ "id" : "Cristina Heredia"
},
{
+ "id" : "Dave Jacoby",
"data" : [
[
"Perl",
@@ -240,20 +124,20 @@
1
]
],
- "name" : "Dave Jacoby",
- "id" : "Dave Jacoby"
+ "name" : "Dave Jacoby"
},
{
- "id" : "E. Choroba",
+ "name" : "E. Choroba",
"data" : [
[
"Perl",
2
]
],
- "name" : "E. Choroba"
+ "id" : "E. Choroba"
},
{
+ "name" : "Flavio Poletti",
"data" : [
[
"Perl",
@@ -268,12 +152,9 @@
2
]
],
- "name" : "Flavio Poletti",
"id" : "Flavio Poletti"
},
{
- "id" : "James Smith",
- "name" : "James Smith",
"data" : [
[
"Perl",
@@ -283,7 +164,9 @@
"Blog",
1
]
- ]
+ ],
+ "name" : "James Smith",
+ "id" : "James Smith"
},
{
"id" : "Jan Krnavek",
@@ -296,37 +179,36 @@
"name" : "Jan Krnavek"
},
{
+ "id" : "jdos22",
"data" : [
[
"Perl",
1
]
],
- "name" : "jdos22",
- "id" : "jdos22"
+ "name" : "jdos22"
},
{
"id" : "Jorg Sommrey",
+ "name" : "Jorg Sommrey",
"data" : [
[
"Perl",
2
]
- ],
- "name" : "Jorg Sommrey"
+ ]
},
{
+ "id" : "Lance Wicks",
"data" : [
[
"Perl",
2
]
],
- "name" : "Lance Wicks",
- "id" : "Lance Wicks"
+ "name" : "Lance Wicks"
},
{
- "id" : "Laurent Rosenfeld",
"data" : [
[
"Perl",
@@ -341,17 +223,18 @@
1
]
],
- "name" : "Laurent Rosenfeld"
+ "name" : "Laurent Rosenfeld",
+ "id" : "Laurent Rosenfeld"
},
{
"id" : "Lubos Kolouch",
- "name" : "Lubos Kolouch",
"data" : [
[
"Perl",
1
]
- ]
+ ],
+ "name" : "Lubos Kolouch"
},
{
"id" : "Luca Ferrari",
@@ -369,33 +252,33 @@
},
{
"id" : "Lucas Ransan",
- "name" : "Lucas Ransan",
"data" : [
[
"Raku",
2
]
- ]
+ ],
+ "name" : "Lucas Ransan"
},
{
- "name" : "Mark Anderson",
"data" : [
[
"Raku",
2
]
],
+ "name" : "Mark Anderson",
"id" : "Mark Anderson"
},
{
+ "id" : "Mohammad S Anwar",
+ "name" : "Mohammad S Anwar",
"data" : [
[
"Perl",
1
]
- ],
- "name" : "Mohammad S Anwar",
- "id" : "Mohammad S Anwar"
+ ]
},
{
"id" : "Niels van Dijke",
@@ -408,28 +291,27 @@
]
},
{
+ "id" : "Paulo Custodio",
"name" : "Paulo Custodio",
"data" : [
[
"Perl",
2
]
- ],
- "id" : "Paulo Custodio"
+ ]
},
{
+ "id" : "Pete Houston",
+ "name" : "Pete Houston",
"data" : [
[
"Perl",
2
]
- ],
- "name" : "Pete Houston",
- "id" : "Pete Houston"
+ ]
},
{
"id" : "Roger Bell_West",
- "name" : "Roger Bell_West",
"data" : [
[
"Perl",
@@ -443,17 +325,18 @@
"Blog",
1
]
- ]
+ ],
+ "name" : "Roger Bell_West"
},
{
- "id" : "Simon Proctor",
"data" : [
[
"Raku",
1
]
],
- "name" : "Simon Proctor"
+ "name" : "Simon Proctor",
+ "id" : "Simon Proctor"
},
{
"name" : "Stuart Little",
@@ -470,17 +353,16 @@
"id" : "Stuart Little"
},
{
- "name" : "Ulrich Rieke",
+ "id" : "Ulrich Rieke",
"data" : [
[
"Perl",
2
]
],
- "id" : "Ulrich Rieke"
+ "name" : "Ulrich Rieke"
},
{
- "name" : "W. Luis Mochan",
"data" : [
[
"Perl",
@@ -491,19 +373,160 @@
1
]
],
+ "name" : "W. Luis Mochan",
"id" : "W. Luis Mochan"
}
]
},
- "yAxis" : {
- "title" : {
- "text" : "Total Solutions"
+ "series" : [
+ {
+ "data" : [
+ {
+ "y" : 4,
+ "drilldown" : "Abigail",
+ "name" : "Abigail"
+ },
+ {
+ "drilldown" : "Adam Russell",
+ "y" : 4,
+ "name" : "Adam Russell"
+ },
+ {
+ "y" : 2,
+ "drilldown" : "Athanasius",
+ "name" : "Athanasius"
+ },
+ {
+ "y" : 2,
+ "drilldown" : "Cheok-Yin Fung",
+ "name" : "Cheok-Yin Fung"
+ },
+ {
+ "name" : "Colin Crain",
+ "y" : 5,
+ "drilldown" : "Colin Crain"
+