diff options
| author | drbaggy <js5@sanger.ac.uk> | 2022-06-15 06:28:41 +0100 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2022-06-15 06:28:41 +0100 |
| commit | 640d609b76d6f98366ddb8edb35959cf3102e11a (patch) | |
| tree | e67c53a9d1f32277f9decaf92b4009bcbc0508c4 | |
| parent | 4e67de07fef7fabe2a2ebd5d371d8644c83de1b9 (diff) | |
| parent | 5cf0768375d1e0df139eec109433726256ed489a (diff) | |
| download | perlweeklychallenge-club-640d609b76d6f98366ddb8edb35959cf3102e11a.tar.gz perlweeklychallenge-club-640d609b76d6f98366ddb8edb35959cf3102e11a.tar.bz2 perlweeklychallenge-club-640d609b76d6f98366ddb8edb35959cf3102e11a.zip | |
Merge remote-tracking branch 'upstream/master'
24 files changed, 2390 insertions, 1977 deletions
diff --git a/challenge-169/e-choroba/perl/ch-1.pl b/challenge-169/e-choroba/perl/ch-1.pl new file mode 100755 index 0000000000..ef863b1cbc --- /dev/null +++ b/challenge-169/e-choroba/perl/ch-1.pl @@ -0,0 +1,24 @@ +#!/usr/bin/perl +use warnings; +use strict; + +use Math::Prime::Util qw{ factor }; + +sub brilliant_numbers { + my ($tally) = @_; + my @brilliant_numbers; + my $n = 1; + while (@brilliant_numbers < $tally) { + my @f = factor(++$n); + push @brilliant_numbers, $n + if 2 == @f + && length($f[0]) == length($f[1]); + } + return \@brilliant_numbers +} + +use Test::More tests => 1; + +is_deeply brilliant_numbers(20), + [4, 6, 9, 10, 14, 15, 21, 25, 35, 49, 121, + 143, 169, 187, 209, 221, 247, 253, 289, 299]; diff --git a/challenge-169/e-choroba/perl/ch-2.pl b/challenge-169/e-choroba/perl/ch-2.pl new file mode 100755 index 0000000000..48e9f7c4eb --- /dev/null +++ b/challenge-169/e-choroba/perl/ch-2.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl +use warnings; +use strict; + +use Math::Prime::Util qw{ factor gcd }; + +sub achilles_numbers { + my ($tally) = @_; + my $n = 1; + my @achilles_numbers; + while (@achilles_numbers < $tally) { + my %factors; + ++$factors{$_} for factor(++$n); + next if grep $_ == 1, values %factors; # Powerful. + + push @achilles_numbers, $n + if 1 == gcd(values %factors); # Not perfect. + } + return \@achilles_numbers +} + +use Test::More tests => 1; +is_deeply achilles_numbers(20), + [72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, + 968, 972, 1125, 1152, 1323, 1352, 1372, 1568, 1800]; diff --git a/challenge-169/ulrich-rieke/cpp/ch-1.cpp b/challenge-169/ulrich-rieke/cpp/ch-1.cpp new file mode 100644 index 0000000000..2d4d8011f4 --- /dev/null +++ b/challenge-169/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,46 @@ +#include <iostream> +#include <vector> +#include <string> +#include <algorithm> + +std::vector<int> primeDecompose( int n ) { + std::vector<int> primeFactors ; + int current = 2 ; + while ( n != 1 ) { + if ( n % current == 0 ) { + primeFactors.push_back( current ) ; + n /= current ; + } + else { + current++ ; + } + } + return primeFactors ; +} + +bool isBrilliant( int n ) { + std::vector<int> primeFactors( primeDecompose( n ) ) ; + if ( primeFactors.size( ) == 2 ) { + std::vector<std::string> primeNumbers( 2 ) ; + std::transform( primeFactors.begin( ) , primeFactors.end( ) , + primeNumbers.begin( ) , []( int i ){ return std::to_string( i ) ;} ) ; + return primeNumbers.begin()->length( ) == primeNumbers.back().length( ) ; + } + else { + return false ; + } +} + +int main( ) { + std::vector<int> brilliantNumbers ; + int current = 2 ; + while ( brilliantNumbers.size( ) != 20 ) { + if ( isBrilliant( current ) ) + brilliantNumbers.push_back( current ) ; + current++ ; + } + for ( int i : brilliantNumbers ) + std::cout << i << " " ; + std::cout << std::endl ; + return 0 ; +} diff --git a/challenge-169/ulrich-rieke/cpp/ch-2.cpp b/challenge-169/ulrich-rieke/cpp/ch-2.cpp new file mode 100644 index 0000000000..ffbcfcdd34 --- /dev/null +++ b/challenge-169/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,66 @@ +#include <iostream> +#include <algorithm> +#include <map> +#include <vector> +#include <numeric> +#include <iterator> + +std::vector<int> primeDecompose( int n ) { + std::vector<int> primeFactors ; + int current = 2 ; + while ( n != 1 ) { + if ( n % current == 0 ) { + primeFactors.push_back( current ) ; + n /= current ; + } + else { + current++ ; + } + } + return primeFactors ; +} + +int my_gcd( int a , int b ) { + std::vector<int> firstFactors( primeDecompose( a ) ) ; + std::vector<int> secondFactors( primeDecompose( b ) ) ; + std::vector<int> common ; + std::set_intersection( firstFactors.begin( ) , firstFactors.end( ) , + secondFactors.begin( ) , secondFactors.end( ) , + std::inserter( common, common.begin( ) )) ; + return std::accumulate( common.begin( ) , common.end( ) , 1 , + std::multiplies( ) ) ; +} + +bool isAchilles( int n ) { + std::vector<int> primeFactors( primeDecompose( n ) ) ; + std::map<int , int> factorCount ; + for ( int i : primeFactors ) { + factorCount[ i ]++ ; + } + std::vector<int> exponents ; + for ( auto it = factorCount.begin( ) ; it != factorCount.end( ) ; ++it ) { + exponents.push_back( it->second ) ; + } + if ( *std::min_element(exponents.begin( ) , exponents.end( ) ) >= 2 ) { + int start = *exponents.begin( ) ; + return (std::accumulate( exponents.begin( ) , exponents.end( ) , start , + []( int a , int b ){ return my_gcd( a , b ) ; } ) == 1 ) ; + } + else + return false ; +} + +int main( ) { + std::vector<int> achillesNumbers ; + int current = 2 ; + while ( achillesNumbers.size( ) != 20 ) { + if ( isAchilles( current ) ) { + achillesNumbers.push_back( current ) ; + } + current++ ; + } + for ( int i : achillesNumbers ) + std::cout << i << " " ; + std::cout << std::endl ; + return 0 ; +} diff --git a/challenge-169/ulrich-rieke/haskell/ch-1.hs b/challenge-169/ulrich-rieke/haskell/ch-1.hs new file mode 100644 index 0000000000..704ef0c9b1 --- /dev/null +++ b/challenge-169/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,26 @@ +module Challenge169 + where + +divisors :: Int -> [Int] +divisors n = [d | d <- [2 .. n] , mod n d == 0 ] + +primeDecompose :: Int -> [Int] +primeDecompose n = snd $ until ( (== 1) . fst ) step (n , [] ) +where + step :: ( Int , [Int] ) -> ( Int , [Int] ) + step ( d , list ) = ( div d h , list ++ [h] ) + where + h = head $ divisors d + +isBrilliant :: Int -> Bool +isBrilliant n = (( length primeFactors ) == 2) && (l1 == l2 ) +where + primeFactors :: [Int] + primeFactors = primeDecompose n + l1 :: Int + l1 = length $ show $ head primeFactors + l2 :: Int + l2 = length $ show $ last primeFactors + +solution :: [Int] +solution = take 20 $ filter isBrilliant [2 , 3 ..] diff --git a/challenge-169/ulrich-rieke/haskell/ch-2.hs b/challenge-169/ulrich-rieke/haskell/ch-2.hs new file mode 100644 index 0000000000..f3d2184277 --- /dev/null +++ b/challenge-169/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,25 @@ +module Challenge169_2 + where +import Data.List ( group ) + +divisors :: Int -> [Int] +divisors n = [d | d <- [2 .. n] , mod n d == 0 ] + +primeDecompose :: Int -> [Int] +primeDecompose n = snd $ until ( (== 1) . fst ) step (n , [] ) +where + step :: ( Int , [Int] ) -> ( Int , [Int] ) + step ( d , list ) = ( div d h , list ++ [h] ) + where + h = head $ divisors d + +isAchilles :: Int -> Bool +isAchilles n = myCondition && ( (foldl1 gcd theLengths ) == 1 ) +where + theLengths :: [Int] + theLengths = map length $ group $ primeDecompose n + myCondition :: Bool + myCondition = if null theLengths then False else (minimum theLengths) >= 2 + +solution :: [Int] +solution = take 20 $ filter isAchilles [2 , 3 ..] diff --git a/challenge-169/ulrich-rieke/perl/ch-1.pl b/challenge-169/ulrich-rieke/perl/ch-1.pl new file mode 100644 index 0000000000..59be1f066b --- /dev/null +++ b/challenge-169/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; + +sub primeDecompose { + my $number = shift ; + my $current = 2 ; + my @primeFactors ; + while ( $number != 1 ) { + if ( $number % $current == 0 ) { + push @primeFactors, $current ; + $number /= $current ; + } + else { + $current++ ; + } + } + return @primeFactors ; +} + +sub isBrilliant { + my $number = shift ; + my @primeFactors = primeDecompose( $number ) ; + return ( (scalar( @primeFactors ) == 2 ) && ( length( $primeFactors[0] ) + == length( $primeFactors[1] ))) ; +} + +my @brilliantNumbers ; +my $current = 1 ; +while ( scalar( @brilliantNumbers ) != 20 ) { + if ( isBrilliant( $current ) ) { + push @brilliantNumbers , $current ; + } + $current++ ; +} +say join( ',' , @brilliantNumbers ) ; diff --git a/challenge-169/ulrich-rieke/perl/ch-2.pl b/challenge-169/ulrich-rieke/perl/ch-2.pl new file mode 100644 index 0000000000..d2f5c0af99 --- /dev/null +++ b/challenge-169/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,67 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; +use List::Util qw ( min max reduce ) ; + +sub primeDecompose { + my $number = shift ; + my $current = 2 ; + my @primeFactors ; + while ( $number != 1 ) { + if ( $number % $current == 0 ) { + push @primeFactors, $current ; + $number /= $current ; + } + else { + $current++ ; + } + } + return @primeFactors ; +} + +sub gcd { + my $first = shift ; + my $second = shift ; + my %firstDivisors ; + my %secondDivisors ; + for my $n ( 1 .. $first ) { + if ( $first % $n == 0 ) { + $firstDivisors{ $n }++ ; + } + } + for my $n ( 1 .. $second ) { + if ( $second % $n == 0 ) { + $secondDivisors{ $n }++ ; + } + } + my @common = grep { exists ($secondDivisors{$_}) } keys %firstDivisors ; + return max( @common ) ; +} + +sub isAchilles { + my $number = shift ; + my @primeFactors = primeDecompose( $number ) ; + my %achilles ; + for my $n ( @primeFactors ) { + $achilles{$n}++ ; + } + my @frequencies = values( %achilles ) ; + my $minFactor = min( @frequencies ) ; + if ( $minFactor < 2 ) { + return 0 ; + } + else { + return ( (reduce { gcd( $a , $b ) } @frequencies) == 1 ) ; + } +} + +my @achillesNumbers ; +my $current = 2 ; +while ( scalar( @achillesNumbers ) != 20 ) { + if ( isAchilles( $current ) ) { + push @achillesNumbers , $current ; + } + $current++ ; +} +say join( ',' , @achillesNumbers ) ; diff --git a/challenge-169/ulrich-rieke/raku/ch-1.raku b/challenge-169/ulrich-rieke/raku/ch-1.raku new file mode 100644 index 0000000000..ce2705bccc --- /dev/null +++ b/challenge-169/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,30 @@ +use v6 ; + +sub primeDecompose( Int $n is copy ) { + my @primeFactors ; + my $current = 2 ; + while ( $n != 1 ) { + while ( not ( $n %% $current ) ) { + $current++ ; + } + @primeFactors.push( $current ) ; + $n div= $current ; + } + return @primeFactors ; +} + +sub isBrilliant( Int $n is copy --> Bool ) { + my @primeFactors = primeDecompose( $n ) ; + return ( @primeFactors.elems == 2 ) && ( ~(@primeFactors[0]).chars == + ~(@primeFactors[1].chars )) ; +} + +my @brilliantNumbers ; +my $current = 2 ; +while ( @brilliantNumbers.elems != 20 ) { + if ( isBrilliant( $current ) ) { + @brilliantNumbers.push( $current ) ; + } + $current++ ; +} +say @brilliantNumbers.join( ',') ; diff --git a/challenge-169/ulrich-rieke/raku/ch-2.raku b/challenge-169/ulrich-rieke/raku/ch-2.raku new file mode 100644 index 0000000000..f04f39e218 --- /dev/null +++ b/challenge-169/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,33 @@ +use v6 ; + +sub primeDecompose( Int $n is copy ) { + my @primeFactors ; + my $current = 2 ; + while ( $n != 1 ) { + while ( not ( $n %% $current ) ) { + $current++ ; + } + @primeFactors.push( $current ) ; + $n div= $current ; + } + return @primeFactors ; +} + +sub isAchillesNumber( Int $n is copy --> Bool ) { + my @primeFactors = primeDecompose( $n ) ; + my %achilles ; + for @primeFactors -> $i { + %achilles{~$i}++ ; + } + return (%achilles.values.min >= 2) && (([gcd] %achilles.values) == 1 ) ; +} + +my @achillesNumbers ; +my $current = 2 ; +while (@achillesNumbers.elems != 20 ) { + if ( isAchillesNumber( $current ) ) { + @achillesNumbers.push( $current ) ; + } + $current++ ; +} +say @achillesNumbers.join( ', ' ) ; diff --git a/stats/pwc-current.json b/stats/pwc-current.json index f59115fdb5..02d32957b6 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,28 +1,106 @@ { - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, "xAxis" : { "type" : "category" }, + "series" : [ + { + "data" : [ + { + "drilldown" : "E. Choroba", + "name" : "E. Choroba", + "y" : 2 + }, + { + "y" : 8, + "drilldown" : "Luca Ferrari", + "name" : "Luca Ferrari" + }, + { + "y" : 2, + "name" : "Mark Anderson", + "drilldown" : "Mark Anderson" + }, + { + "drilldown" : "Peter Campbell Smith", + "name" : "Peter Campbell Smith", + "y" : 3 + }, + { + "name" : "PokGoPun", + "drilldown" : "PokGoPun", + "y" : 2 + }, + { + "name" : "Robert DiCicco", + "drilldown" : "Robert DiCicco", + "y" : 1 + }, + { + "y" : 4, + "name" : "Roger Bell_West", + "drilldown" : "Roger Bell_West" + }, + { + "name" : "Simon Green", + "drilldown" : "Simon Green", + "y" : 3 + }, + { + "y" : 4, + "drilldown" : "Stephen G Lynn", + "name" : "Stephen G Lynn" + }, + { + "drilldown" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "y" : 4 + }, + { + "y" : 3, + "drilldown" : "W. Luis Mochan", + "name" : "W. Luis Mochan" + } + ], + "colorByPoint" : 1, + "name" : "The Weekly Challenge - 169" + } + ], + "legend" : { + "enabled" : 0 + }, "subtitle" : { - "text" : "[Champions: 9] Last updated at 2022-06-14 20:05:56 GMT" + "text" : "[Champions: 11] Last updated at 2022-06-14 23:23:29 GMT" }, - "title" : { - "text" : "The Weekly Challenge - 169" + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + } + } }, - "legend" : { - "enabled" : 0 + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } }, - "chart" : { - "type" : "column" + "title" : { + "text" : "The Weekly Challenge - 169" }, "drilldown" : { "series" : [ { - "id" : "Luca Ferrari", + "name" : "E. Choroba", + "id" : "E. Choroba", + "data" : [ + [ + "Perl", + 2 + ] + ] + }, + { "data" : [ [ "Raku", @@ -33,6 +111,7 @@ 6 ] ], + "id" : "Luca Ferrari", "name" : "Luca Ferrari" }, { @@ -46,8 +125,8 @@ "id" : "Mark Anderson" }, { - "id" : "Peter Campbell Smith", "name" : "Peter Campbell Smith", + "id" : "Peter Campbell Smith", "data" : [ [ "Perl", @@ -60,14 +139,14 @@ ] }, { + "id" : "PokGoPun", "data" : [ [ "Perl", 2 ] ], - "name" : "PokGoPun", - "id" : "PokGoPun" + "name" : "PokGoPun" }, { "id" : "Robert DiCicco", @@ -80,6 +159,7 @@ "name" : "Robert DiCicco" }, { + "name" : "Roger Bell_West", "data" : [ [ "Perl", @@ -90,7 +170,6 @@ 2 ] ], - "name" : "Roger Bell_West", "id" : "Roger Bell_West" }, { @@ -109,6 +188,7 @@ }, { "name" : "Stephen G Lynn", + "id" : "Stephen G Lynn", "data" : [ [ "Perl", @@ -118,8 +198,21 @@ "Raku", 2 ] - ], - "id" : "Stephen G Lynn" + ] + }, + { + "name" : "Ulrich Rieke", + "id" : "Ulrich Rieke", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] + ] }, { "data" : [ @@ -132,76 +225,17 @@ 1 ] ], - "name" : "W. Luis Mochan", - "id" : "W. Luis Mochan" + "id" : "W. Luis Mochan", + "name" : "W. Luis Mochan" } ] }, - "plotOptions" : { - "series" : { - "borderWidth" : 0, - "dataLabels" : { - "enabled" : 1, - "format" : "{point.y}" - } - } - }, "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/>", - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>" + "followPointer" : 1 }, - "series" : [ - { - "colorByPoint" : 1, - "data" : [ - { - "y" : 8, - "name" : "Luca Ferrari", - "drilldown" : "Luca Ferrari" - }, - { - "y" : 2, - "drilldown" : "Mark Anderson", - "name" : "Mark Anderson" - }, - { - "y" : 3, - "drilldown" : "Peter Campbell Smith", - "name" : "Peter Campbell Smith" - }, - { - "y" : 2, - "name" : "PokGoPun", - "drilldown" : "PokGoPun" - }, - { - "drilldown" : "Robert DiCicco", - "name" : "Robert DiCicco", - "y" : 1 - }, - { - "name" : "Roger Bell_West", - "drilldown" : "Roger Bell_West", - "y" : 4 - }, - { - "name" : "Simon Green", - "drilldown" : "Simon Green", - "y" : 3 - }, - { - "y" : 4, - "drilldown" : "Stephen G Lynn", - "name" : "Stephen G Lynn" - }, - { - "y" : 3, - "drilldown" : "W. Luis Mochan", - "name" : "W. Luis Mochan" - } - ], - "name" : "The Weekly Challenge - 169" - } - ] + "chart" : { + "type" : "column" + } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index c59e609bf2..4638097288 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,12 +1,21 @@ { - "chart" : { - "type" : "column" - }, - "tooltip" : { - "pointFormat" : "<b>{point.y:.0f}</b>" + "legend" : { + "enabled" : "false" }, "series" : [ { + "dataLabels" : { + "enabled" : "true", + "y" : 10, + "style" : { + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" + }, + "align" : "right", + "format" : "{point.y:.0f}", + "rotation" : -90, + "color" : "#FFFFFF" + }, "data" : [ [ "Blog", @@ -14,50 +23,41 @@ ], [ "Perl", - 8208 + 8212 ], [ "Raku", - 4872 + 4874 ] ], - "name" : "Contributions", - "dataLabels" : { - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - }, - "color" : "#FFFFFF", - "y" : 10, - "rotation" : -90, - "align" : "right", - "enabled" : "true", - "format" : "{point.y:.0f}" - } + "name" : "Contributions" } ], "xAxis" : { "type" : "category", "labels" : { "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" } } }, + "subtitle" : { + "text" : "Last updated at 2022-06-14 23:23:29 GMT" + }, "yAxis" : { - "min" : 0, "title" : { "text" : null - } + }, + "min" : 0 }, - "subtitle" : { - "text" : "Last updated at 2022-06-14 20:05:56 GMT" + "chart" : { + "type" : "column" + }, + "tooltip" : { + "pointFormat" : "<b>{point.y:.0f}</b>" }, "title" : { "text" : "The Weekly Challenge Contributions [2019 - 2022]" - }, - "legend" : { - "enabled" : "false" } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 1d897066af..5ced0350d7 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,4 +1,869 @@ { + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2022-06-14 23:23:29 GMT" + }, + "series" : [ + { + "name" : "The Weekly Challenge Languages", + "colorByPoint" : "true", + "data" : [ + { + "y" : 161, + "drilldown" : "001", + "name" : "#001" + }, + { + "name" : "#002", + "drilldown" : "002", + "y" : 125 + }, + { + "name" : "#003", + "drilldown" : "003", + "y" : 83 + }, + { + "y" : 99, + "name" : "#004", + "drilldown" : "004" + }, + { + "y" : 78, + "drilldown" : "005", + "name" : "#005" + }, + { + "drilldown" : "006", + "name" : "#006", + "y" : 58 + }, + { + "y" : 64, + "name" : "#007", + "drilldown" : "007" + }, + { + "y" : 78, + "name" : "#008", + "drilldown" : "008" + }, + { + "y" : 76, + "drilldown" : "009", + "name" : "#009" + }, + { + "name" : "#010", + "drilldown" : "010", + "y" : 65 + }, + { + "y" : 85, + "drilldown" : "011", + "name" : "#011" + }, + { + "drilldown" : "012", + "name" : "#012", + "y" : 89 + }, + { + "y" : 85, + "drilldown" : "013", + "name" : "#013" + }, + { + "y" : 101, + "drilldown" : "014", + "name" : "#014" + }, + { + "name" : "#015", + "drilldown" : "015", + "y" : 99 + }, + { + "y" : 71, + "name" : "#016", + "drilldown" : "016" + }, + { + "name" : "#017", + "drilldown" : "017", + "y" : 84 + }, + { + "y" : 81, + "name" : "#018", + "drilldown" : "018" + }, + { + "y" : 103, + "name" : "#019", + "drilldown" : "019" + }, + { + "y" : 101, + "drilldown" : "020", + "name" : "#020" + }, + { + "name" : "#021", + "drilldown" : "021", + "y" : 72 + }, + { + "y" : 68, + "drilldown" : "022", + "name" : "#022" + }, + { + "drilldown" : "023", + "name" : "#023", + "y" : 97 + }, + { + "y" : 75, + "drilldown" : "024", + "name" : "#024" + }, + { |
