diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-07-18 21:11:02 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-07-18 21:11:02 +0100 |
| commit | df4cf0dec3295559d5a1053c6a82081cebbedf50 (patch) | |
| tree | bf7a17fc908c308de06890994cc3d46cd47d5c95 | |
| parent | f42dc508d4ece156ce9d3df05ace5334fdd44069 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-121/colin-crain/perl/ch-1.pl | 47 | ||||
| -rw-r--r-- | challenge-121/colin-crain/perl/ch-2.pl | 352 | ||||
| -rw-r--r-- | challenge-121/colin-crain/raku/ch-1.raku | 16 | ||||
| -rw-r--r-- | challenge-121/colin-crain/raku/ch-2.raku | 43 | ||||
| -rw-r--r-- | stats/pwc-current.json | 435 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 54 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 1624 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 716 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 46 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 46 | ||||
| -rw-r--r-- | stats/pwc-summary-151-180.json | 50 | ||||
| -rw-r--r-- | stats/pwc-summary-181-210.json | 56 | ||||
| -rw-r--r-- | stats/pwc-summary-211-240.json | 96 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 112 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 126 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 120 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 40 |
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" + |
