diff options
| -rw-r--r-- | challenge-007/laurent-rosenfeld/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl5/ch-1.sh | 1 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl5/ch-1a.pl | 11 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl5/ch-2.pl | 19 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl5/ch-2a.pl | 86 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl6/ch-1.sh | 1 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl6/ch-1a.sh | 1 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl6/ch-1b.p6 | 7 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl6/ch-2.p6 | 67 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl6/lib/Store.pm6 | 18 | ||||
| -rw-r--r-- | challenge-007/laurent-rosenfeld/perl6/word_store_4 | 6 | ||||
| -rw-r--r-- | stats/pwc-current.json | 159 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 90 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 776 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 58 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 46 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 76 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 198 |
18 files changed, 929 insertions, 692 deletions
diff --git a/challenge-007/laurent-rosenfeld/blog.txt b/challenge-007/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..1594312528 --- /dev/null +++ b/challenge-007/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/laurent_r/2019/05/perl-weekly-challenge-7-niven-numbers-and-word-ladders.html diff --git a/challenge-007/laurent-rosenfeld/perl5/ch-1.sh b/challenge-007/laurent-rosenfeld/perl5/ch-1.sh new file mode 100644 index 0000000000..20e97ea5ba --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl5/ch-1.sh @@ -0,0 +1 @@ +perl -E 'for my $num(1..50) { my $sum = 0; $sum += $_ for (split //, $num); say $num if $num % $sum == 0;}' diff --git a/challenge-007/laurent-rosenfeld/perl5/ch-1a.pl b/challenge-007/laurent-rosenfeld/perl5/ch-1a.pl new file mode 100644 index 0000000000..90a9fb4904 --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl5/ch-1a.pl @@ -0,0 +1,11 @@ +use strict; +use warnings; +use feature qw/say/; + +for my $num(1..50) { + my $sum = 0; + for (split //, $num) { + $sum += $_; + } + say $num if $num % $sum == 0; +} diff --git a/challenge-007/laurent-rosenfeld/perl5/ch-2.pl b/challenge-007/laurent-rosenfeld/perl5/ch-2.pl new file mode 100644 index 0000000000..ddc3c1b082 --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl5/ch-2.pl @@ -0,0 +1,19 @@ +use strict; +use warnings; +use feature qw/say/; +sub edit_distance { + my ($word1, $word2) = @_; + die "Words $word1 and $word2 have different lengths\n" unless length $word1 == length $word2; + my @w1 = split //, $word1; + my @w2 = split //, $word2; + my $dist = 0; + for my $i (0..$#w1) { + $dist++ if $w1[$i] ne $w2[$i]; + } + return $dist; +} +for my $word_pair_ref (["cold", "cord"], ["cord", "core"], ["cord", "cord"], + ["cold", "warm"], ["kitten", "sittin"], ["kitten", "sitting"]) { + my ($w1, $w2) = @$word_pair_ref; + say "Distance between $w1 and $w2 is: \t", edit_distance ($w1, $w2); +} diff --git a/challenge-007/laurent-rosenfeld/perl5/ch-2a.pl b/challenge-007/laurent-rosenfeld/perl5/ch-2a.pl new file mode 100644 index 0000000000..ec41946a3a --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl5/ch-2a.pl @@ -0,0 +1,86 @@ +use strict; +use warnings; +use feature qw/say/; +use Storable; +use Data::Dumper; + +die "Please pass two words as parameters" unless @ARGV == 2; +my ($word1, $word2)= @ARGV; +my $length = length $word1; +die "The two words must have the same length\n" if $length != length $word2; + +my $store_file = "word_store_$length"; +my ($store_ref, %words); +if (-e $store_file) { + my $store_ref = retrieve($store_file); + %words = %$store_ref; +} else { + my $file = "words$length.txt"; + open my $IN, '<', $file or die "Cannot open $file$!"; + while (my $word = <$IN>) { + chomp $word; + $words{$word} = []; + for my $key (keys %words) { + if (edit_distance($key, $word) == 1) { + push @{$words{$key}}, $word; + push @{$words{$word}}, $key; + } + } + } + close $IN; + my $orphans = "aloof_$length.txt"; + open my $OUT, ">", $orphans or die "Cannot open file $orphans$!"; + for my $key (keys %words){ + if (scalar keys $words{$key} == 0) { + say $OUT "$key"; + delete $words{$key}; + } + } + close $OUT; + store \%words, $store_file; +} + +my $max = $le ngth * 2; + +sub edit_distance { + my ($word1, $word2) = @_; + # die "Words $word1 and $word2 ..." -> No longer needed as this is checked before + my @w1 = split //, $word1; + my @w2 = split //, $word2; + my $dist = 0; + for my $i (0..$#w1) { + $dist++ if $w1[$i] ne $w2[$i]; + } + return $dist; +} + +sub ladder { + my ($word1, $word2, $tmp_result) = @_; + return $tmp_result if $word1 eq $word2; + return [] if scalar @$tmp_result >= $max; + my @temp_solutions; + for my $word (@{$words{$word1}}) { + next if $word eq $word1; + next if grep { $_ eq $word } @$tmp_result; # not really needed but a bit faster + push @temp_solutions, [@$tmp_result, $word] and last if $word eq $word2; + my $new_tmp = ladder($word, $word2, [@$tmp_result, $word]); + next if scalar @$new_tmp == scalar @$tmp_result; + next unless scalar @$new_tmp; + push @temp_solutions, $new_tmp; + } + return [] unless @temp_solutions; + my $best_sol = (sort { scalar @$a <=> scalar @$b } @temp_solutions)[0]; + $max = scalar @$best_sol if scalar @$best_sol < $max; + return $best_sol; +} + +for ($word1, $word2) { + die "Word $_ not found\n" unless exists $words{$_}; +} +my $ladder = ladder $word1, $word2, [$word1]; + +if (@$ladder) { + say join "->", @$ladder; +} else { + say "No ladder found for $word1 and $word2" +} diff --git a/challenge-007/laurent-rosenfeld/perl6/ch-1.sh b/challenge-007/laurent-rosenfeld/perl6/ch-1.sh new file mode 100644 index 0000000000..436dd11dc0 --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl6/ch-1.sh @@ -0,0 +1 @@ +perl6 -e 'for 1..50 -> $num { my $sum = [+] $num.comb; say $num if $num %% $sum}' diff --git a/challenge-007/laurent-rosenfeld/perl6/ch-1a.sh b/challenge-007/laurent-rosenfeld/perl6/ch-1a.sh new file mode 100644 index 0000000000..8469829fcf --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl6/ch-1a.sh @@ -0,0 +1 @@ +perl6 -e '.say if $_ %% [+] $_.comb for 1..50' diff --git a/challenge-007/laurent-rosenfeld/perl6/ch-1b.p6 b/challenge-007/laurent-rosenfeld/perl6/ch-1b.p6 new file mode 100644 index 0000000000..a8be63bf49 --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl6/ch-1b.p6 @@ -0,0 +1,7 @@ +use v6; +.say for gather { + for 1..50 -> $num { + my $sum = [+] $num.comb; + take $num if $num %% $sum + } +} diff --git a/challenge-007/laurent-rosenfeld/perl6/ch-2.p6 b/challenge-007/laurent-rosenfeld/perl6/ch-2.p6 new file mode 100644 index 0000000000..a2f501e2d8 --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl6/ch-2.p6 @@ -0,0 +1,67 @@ +#!/usr/bin/env perl6 + +use v6; +use lib 'lib'; +use Store; + +die "Please pass two words as parameters" unless @*ARGS == 2; +my ($word1, $word2)= @*ARGS; +my $length = $word1.chars; +die "The two words must have the same length\n" if $length != $word2.chars; + +my $max = 2 * $length; +my $store-file = "word_store_$length"; +my ($stored, %words); +if ($store-file.IO.e) { + retrieve %words, $store-file; +} else { + for "words$length.txt".IO.lines -> $word { + %words{$word} = []; + for keys %words -> $key { + if (edit-distance($key, $word) == 1) { + push @(%words{$key}), $word; + push @(%words{$word}), $key; + } + } + } + %words = grep { $_.value.elems > 0 }, %words.pairs; + store %words, $store-file; +} + +sub edit-distance (Str $word1, Str $word2) { + my @w1 = $word1.comb; + my @w2 = $word2.comb; + my $dist = 0; + $dist++ if @w1[$_] ne @w2[$_] for (0..@w1.end) ; + return $dist; +} + +sub ladder (Str $word1, Str $word2, $tmp-result) { + return $tmp-result if ($word1 eq $word2); + return [] if @$tmp-result.elems >= $max; + my @temp-solutions; + for @(%words{$word1}) -> $word { + next if $word eq $word1; + next if grep { $_ eq $word }, @$tmp-result; + push @temp-solutions, [|@$tmp-result, $word] and last if $word eq $word2; + my $new_tmp = ladder($word, $word2, [|@$tmp-result, $word]); + next if @$new_tmp.elems == @$tmp-result.elems; + next unless @$new_tmp.elems; + push @temp-solutions, $new_tmp; + } + return [] if @temp-solutions.elems == 0; + my $best_sol = (sort { $_.elems }, @temp-solutions)[0]; + $max = @$best_sol.elems if @$best_sol.elems < $max; + return $best_sol; +} + +for ($word1, $word2) { + die "Word $_ not found\n" unless %words{$_} :exists; +} +my $ladder = ladder $word1, $word2, [$word1]; + +if (@$ladder) { + say join "->", @$ladder; +} else { + say "No ladder found for $word1 and $word2" +} diff --git a/challenge-007/laurent-rosenfeld/perl6/lib/Store.pm6 b/challenge-007/laurent-rosenfeld/perl6/lib/Store.pm6 new file mode 100644 index 0000000000..83bd1313bd --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl6/lib/Store.pm6 @@ -0,0 +1,18 @@ +unit package Store; + +sub store (%hash, $file) is export { + # stores a hash or array as lines containing key et values + # such as: key | val1 val2 val3 + my $out; + for %hash.kv -> $key, $val { + $out ~= "$key | $val \n"; + } + spurt $file, $out; +} +sub retrieve (%hash, $file) is export { + # populates a hash of arrays with stored data + for $file.IO.lines -> $line { + my ($key, $val) = split /\s?\|\s?/, $line; + %hash{$key} = $val.words; + } +} diff --git a/challenge-007/laurent-rosenfeld/perl6/word_store_4 b/challenge-007/laurent-rosenfeld/perl6/word_store_4 new file mode 100644 index 0000000000..990c2ea31d --- /dev/null +++ b/challenge-007/laurent-rosenfeld/perl6/word_store_4 @@ -0,0 +1,6 @@ +yawl | bawl pawl wawl yawn yawp yaws yowl +pled | fled bled pied plea peed gled pleb plod sled +pita | dita pima pica pika pina pith pits pity vita +keir | heir weir +quag | quad quai quay +frug | frig frog frag drug diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 4e4c94f658..cac02451b0 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,54 +1,49 @@ { "subtitle" : { - "text" : "[Champions: 13] Last updated at 2019-05-12 11:35:27 GMT" + "text" : "[Champions: 14] Last updated at 2019-05-12 14:19:44 GMT" }, - "legend" : { - "enabled" : 0 - }, - "plotOptions" : { - "series" : { - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - }, - "borderWidth" : 0 - } - }, - "chart" : { - "type" : "column" + "tooltip" : { + "followPointer" : 1, + "pointerFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>" }, "yAxis" : { "title" : { "text" : "Total Solutions" } }, + "xAxis" : { + "type" : "category" + }, "series" : [ { + "colorByPoint" : 1, + "name" : "Champions", "data" : [ { - "name" : "Alicia Bielsa", "y" : 1, + "name" : "Alicia Bielsa", "drilldown" : "Alicia Bielsa" }, { - "name" : "Andrezgz", "drilldown" : "Andrezgz", - "y" : 1 + "y" : 1, + "name" : "Andrezgz" }, { + "y" : 2, "name" : "Athanasius", - "drilldown" : "Athanasius", - "y" : 2 + "drilldown" : "Athanasius" }, { "y" : 2, - "drilldown" : "Dave Jacoby", - "name" : "Dave Jacoby" + "name" : "Dave Jacoby", + "drilldown" : "Dave Jacoby" }, { + "y" : 2, "name" : "Finley", - "drilldown" : "Finley", - "y" : 2 + "drilldown" : "Finley" }, { "drilldown" : "Francis Whittle", @@ -56,64 +51,62 @@ "name" : "Francis Whittle" }, { - "y" : 2, "drilldown" : "Gustavo Chaves", - "name" : "Gustavo Chaves" + "name" : "Gustavo Chaves", + "y" : 2 }, { - "y" : 2, "drilldown" : "Jo Christian Oterhals", + "y" : 2, "name" : "Jo Christian Oterhals" }, { + "drilldown" : "Joelle Maslak", "name" : "Joelle Maslak", + "y" : 4 + }, + { "y" : 4, - "drilldown" : "Joelle Maslak" + "name" : "Laurent Rosenfeld", + "drilldown" : "Laurent Rosenfeld" }, { - "y" : 2, "drilldown" : "Maxim Nechaev", + "y" : 2, "name" : "Maxim Nechaev" }, { - "drilldown" : "Ozzy", "y" : 1, - "name" : "Ozzy" + "name" : "Ozzy", + "drilldown" : "Ozzy" }, { - "name" : "Ruben Westerberg", + "drilldown" : "Ruben Westerberg", "y" : 4, - "drilldown" : "Ruben Westerberg" + "name" : "Ruben Westerberg" }, { "drilldown" : "Simon Proctor", - "y" : 1, - "name" : "Simon Proctor" + "name" : "Simon Proctor", + "y" : 1 } - ], - "colorByPoint" : 1, - "name" : "Champions" + ] } ], - "xAxis" : { - "type" : "category" - }, - "tooltip" : { - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", - "pointerFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", - "followPointer" : 1 + "legend" : { + "enabled" : 0 }, "drilldown" : { "series" : [ { + "id" : "Alicia Bielsa", "name" : "Alicia Bielsa", "data" : [ [ "Perl 5", 1 ] - ], - "id" : "Alicia Bielsa" + ] }, { "name" : "Andrezgz", @@ -127,13 +120,13 @@ }, { "id" : "Athanasius", + "name" : "Athanasius", "data" : [ [ "Perl 5", 2 ] - ], - "name" : "Athanasius" + ] }, { "name" : "Dave Jacoby", @@ -146,47 +139,48 @@ ] }, { + "name" : "Finley", + "id" : "Finley", "data" : [ [ "Perl 6", 2 ] - ], - "id" : "Finley", - "name" : "Finley" + ] }, { + "id" : "Francis Whittle", + "name" : "Francis Whittle", "data" : [ [ "Perl 6", 2 ] - ], - "id" : "Francis Whittle", - "name" : "Francis Whittle" + ] }, { - "name" : "Gustavo Chaves", "data" : [ [ "Perl 5", 2 ] ], + "name" : "Gustavo Chaves", "id" : "Gustavo Chaves" }, { + "name" : "Jo Christian Oterhals", + "id" : "Jo Christian Oterhals", "data" : [ [ "Perl 6", 2 ] - ], - "id" : "Jo Christian Oterhals", - "name" : "Jo Christian Oterhals" + ] }, { "id" : "Joelle Maslak", + "name" : "Joelle Maslak", "data" : [ [ "Perl 5", @@ -196,31 +190,43 @@ "Perl 6", 2 ] - ], - "name" : "Joelle Maslak" + ] + }, + { + "name" : "Laurent Rosenfeld", + "id" : "Laurent Rosenfeld", + "data" : [ + [ + "Perl 5", + 2 + ], + [ + "Perl 6", + 2 + ] + ] }, { - "id" : "Maxim Nechaev", "data" : [ [ "Perl 5", 2 ] ], - "name" : "Maxim Nechaev" + "name" : "Maxim Nechaev", + "id" : "Maxim Nechaev" }, { - "id" : "Ozzy", "data" : [ [ "Perl 6", 1 ] ], - "name" : "Ozzy" + "name" : "Ozzy", + "id" : "Ozzy" }, { - "name" : "Ruben Westerberg", "data" : [ [ "Perl 5", @@ -231,21 +237,34 @@ 2 ] ], - "id" : "Ruben Westerberg" + "id" : "Ruben Westerberg", + "name" : "Ruben Westerberg" }, { - "name" : "Simon Proctor", - "id" : "Simon Proctor", "data" : [ [ "Perl 6", 1 ] - ] + ], + "id" : "Simon Proctor", + "name" : "Simon Proctor" } ] }, + "plotOptions" : { + "series" : { + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + }, + "borderWidth" : 0 + } + }, "title" : { "text" : "Perl Weekly Challenge - 007" + }, + "chart" : { + "type" : "column" } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 4a074170ce..7b32920482 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,6 +1,6 @@ { - "title" : { - "text" : "Perl Weekly Challenge Language" + "chart" : { + "type" : "column" }, "series" : [ { @@ -12,55 +12,70 @@ }, { "y" : 95, - "name" : "#002 [P5=63 P6=32]", - "drilldown" : "002" + "drilldown" : "002", + "name" : "#002 [P5=63 P6=32]" }, { "y" : 58, - "name" : "#003 [P5=32 P6=26]", - "drilldown" : "003" + "drilldown" : "003", + "name" : "#003 [P5=32 P6=26]" }, { - "drilldown" : "004", "y" : 75, + "drilldown" : "004", "name" : "#004 [P5=46 P6=29]" }, { - "drilldown" : "005", "name" : "#005 [P5=33 P6=22]", - "y" : 55 + "y" : 55, + "drilldown" : "005" }, { + "drilldown" : "006", "y" : 41, - "name" : "#006 [P5=27 P6=14]", - "drilldown" : "006" + "name" : "#006 [P5=27 P6=14]" }, { + "name" : "#007 [P5=16 P6=14]", "drilldown" : "007", - "name" : "#007 [P5=14 P6=12]", - "y" : 26 + "y" : 30 } ], "name" : "Perl Weekly Challenge Languages", "colorByPoint" : "true" } ], + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "xAxis" : { + "type" : "category" + }, + "title" : { + "text" : "Perl Weekly Challenge Language" + }, + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2019-05-12 14:20:10 GMT" + }, "plotOptions" : { "series" : { - "borderWidth" : 0, "dataLabels" : { "format" : "{point.y}", "enabled" : 1 - } + }, + "borderWidth" : 0 } }, - "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2019-05-12 11:35:33 GMT" + "tooltip" : { + "headerFormat" : "<span style=\"font-size:11px\"></span>", + "followPointer" : "true", + "pointFormat" : "<span style=\"color:{point.color}\">{point.name}</span>: <b>{point.y:f}</b><br/>" }, "drilldown" : { "series" : [ { - "id" : "001", "name" : "001", "data" : [ [ @@ -71,9 +86,11 @@ "Perl 6", 37 ] - ] + ], + "id" : "001" }, { + "id" : "002", "data" : [ [ "Perl 5", @@ -84,10 +101,11 @@ 32 ] ], - "id" : "002", "name" : "002" }, { + "name" : "003", + "id" : "003", "data" : [ [ "Perl 5", @@ -97,9 +115,7 @@ "Perl 6", 26 ] - ], - "id" : "003", - "name" : "003" + ] }, { "data" : [ @@ -116,8 +132,6 @@ "name" : "004" }, { - "name" : "005", - "id" : "005", "data" : [ [ "Perl 5", @@ -127,9 +141,12 @@ "Perl 6", 22 ] - ] + ], + "id" : "005", + "name" : "005" }, { + "id" : "006", "data" : [ [ "Perl 5", @@ -140,7 +157,6 @@ 14 ] ], - "id" : "006", "name" : "006" }, { @@ -149,33 +165,17 @@ "data" : [ [ "Perl 5", - 14 + 16 ], [ "Perl 6", - 12 + 14 ] ] } ] }, - "xAxis" : { - "type" : "category" - }, "legend" : { "enabled" : "false" - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, - "tooltip" : { - "followPointer" : "true", - "pointFormat" : "<span style=\"color:{point.color}\">{point.name}</span>: <b>{point.y:f}</b><br/>", - "headerFormat" : "<span style=\"font-size:11px\"></span>" - }, - "chart" : { - "type" : "column" } } diff --git a/stats/pwc-leaders.json b/stats/pwc-leaders.json index f66d39557b..be1bd3d418 100644 --- a/stats/pwc-leaders.json +++ b/stats/pwc-leaders.json @@ -1,90 +1,374 @@ { + "tooltip" : { + "pointFormat" : "<span style=\"color:{point.color}\">{point.name}</span>: <b>{point.y:f}</b><br/>", + "headerFormat" : "<span style=\"font-size:11px\"></span>", + "followPointer" : "true" + }, + "title" : { + "text" : "Perl Weekly Challenge Leaders (TOP 50)" + }, + "xAxis" : { + "type" : "category" + }, + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "enabled" : 1, + "format" : "{point.y}" + } + } + }, + "chart" : { + "type" : "column" + }, + "subtitle" : { + "text" : "Click the columns to drilldown the score breakdown. Last updated at 2019-05-12 14:19:55 GMT" + }, + "series" : [ + { + "name" : "Perl Weekly Challenge Leaders", + "colorByPoint" : "true", + "data" : [ + { + "name" : "#1: Laurent Rosenfeld", + "drilldown" : "Laurent Rosenfeld", + "y" : 70 + }, + { + "y" : 58, + "name" : "#2: Joelle Maslak", + "drilldown" : "Joelle Maslak" + }, + { + "y" : 48, + "name" : "#3: Jaldhar H. Vyas", + "drilldown" : "Jaldhar H. Vyas" + }, + { + "name" : "#4: Ruben Westerberg", + "drilldown" : "Ruben Westerberg", + "y" : 48 + }, + { + "y" : 42, + "drilldown" : "Jo Christian Oterhals", + "name" : "#5: Jo Christian Oterhals" + }, + { + "y" : 42, + "name" : "#6: Simon Proctor", + "drilldown" : "Simon Proctor" + }, + { + "y" : 36, + "name" : "#7: Adam Russell", + "drilldown" : "Adam Russell" + }, + { + "drilldown" : "Dr James A. Smith", + "name" : "#8: Dr James A. Smith", + "y" : 36 + }, + { + "drilldown" : "Kian-Meng Ang", + "name" : "#9: Kian-Meng Ang", + "y" : 32 + }, + { + "y" : 32, + "drilldown" : "Nick Logan", + "name" : "#10: Nick Logan" + }, + { + "drilldown" : "Arne Sommer", + "name" : "#11: Arne Sommer", + "y" : 30 + }, + { + "y" : 30, + "drilldown" : "Gustavo Chaves", + "name" : "#12: Gustavo Chaves" + }, + { + "drilldown" : "Athanasius", + "name" : "#13: Athanasius", + "y" : 28 + }, + { + "y" : 28, + "drilldown" : "Lars Balker", + "name" : "#14: Lars Balker" + }, + { + "y" : 26, + "drilldown" : "Andrezgz", + "name" : "#15: Andrezgz" + }, + { + "drilldown" : "Mark Senn", + "name" : "#16: Mark Senn", + "y" : 26 + }, + { + "y" : 22, + "name" : "#17: Francis Whittle", + "drilldown" : "Francis Whittle" + }, + { + "y" : 20, + "name" : "#18: Doug Schrag", + "drilldown" : "Doug Schrag" + }, + { + "name" : "#19: Duncan C. White", + "drilldown" : "Duncan C. White", + "y" : 20 + }, + { + "y" : 16, + "drilldown" : "Robert Gratza", + "name" : "#20: Robert Gratza" + }, + { + "y" : 14, + "drilldown" : "Daniel Mantovani", + "name" : "#21: Daniel Mantovani" + }, + { + "name" : "#22: Dave Jacoby", + "drilldown" : "Dave Jacoby", + "y" : 14 + }, + { + "drilldown" : "John Barrett", + "name" : "#23: John Barrett", + "y" : 14 + }, + { + "y" : 12, + "name" : "#24: E. Choroba", + "drilldown" : "E. Choroba" + }, + { + "drilldown" : "Maxim Kolodyazhny", + "name" : "#25: Maxim Kolodyazhny", + "y" : 12 + }, + { + "name" : "#26: Ozzy", + "drilldown" : "Ozzy", + "y" : 12 + }, + { + "y" : 12, + "name" : "#27: Philippe Bruhat", + "drilldown" : "Philippe Bruhat" + }, + { + "y" : 12, + "drilldown" : "Sergio Iglesias", + "name" : "#28: Sergio Iglesias" + }, + { + "name" : "#29: Arpad Toth", + "drilldown" : "Arpad Toth", + "y" : 10 + }, + { + "y" : 10, + "name" : "#30: Khalid", + "drilldown" : "Khalid" + }, + { + "name" : "#31: Steve Rogerson", + "drilldown" : "Steve Rogerson", + "y" : 10 + }, + { + "name" : "#32: Veesh Goldman", + "drilldown" : "Veesh Goldman", + "y" : 10 + }, + { + "drilldown" : "Alex Daniel", |
