diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-04-05 21:38:59 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-04-05 21:38:59 +0100 |
| commit | b2ad01584238b6bf7603faeb2748d93d431345a6 (patch) | |
| tree | 7262cba82ffdeaf2db763bd0753b437ee43f3dc4 | |
| parent | 6aa5c270464f36c0fb846c3dfd8b95db8dc2fa66 (diff) | |
| download | perlweeklychallenge-club-b2ad01584238b6bf7603faeb2748d93d431345a6.tar.gz perlweeklychallenge-club-b2ad01584238b6bf7603faeb2748d93d431345a6.tar.bz2 perlweeklychallenge-club-b2ad01584238b6bf7603faeb2748d93d431345a6.zip | |
- Added solutions by Ulrich Rieke.
22 files changed, 1524 insertions, 1166 deletions
diff --git a/challenge-159/ulrich-rieke/cpp/ch-1.cpp b/challenge-159/ulrich-rieke/cpp/ch-1.cpp new file mode 100644 index 0000000000..fd619c7af4 --- /dev/null +++ b/challenge-159/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,35 @@ +#include <vector> +#include <iostream> +#include <numeric> +#include <utility> +#include <cstdlib> +#include <algorithm> + +int main( int argc, char * argv[] ) { + int n = std::atoi( argv[1] ) ; + while ( n <= 0 ) { + std::cout << "Please enter an integer greater than 0!\n" ; + std::cin >> n ; + } + std::vector<int> numerators( n ) ; + std::vector<int> denominators( n + 1 ) ; + std::iota( numerators.begin( ) , numerators.end( ) , 1) ; + std::iota( denominators.begin( ) , denominators.end( ) , 0 ) ; + std::vector<std::pair<int, int>> fractions ; + fractions.push_back( std::make_pair( 0 , 1 ) ) ; + for ( int i : numerators ) { + for ( int j : denominators ) { + if ( i < j && (std::lcm( i , j ) == i * j)) { + fractions.push_back( std::make_pair( i , j )) ; + } + } + } + std::sort( fractions.begin( ) , fractions.end( ) , + []( const auto & a, const auto & b ) { return + (static_cast<double>(a.first) / static_cast<double>(a.second)) < + (static_cast<double>(b.first) / static_cast<double>(b.second));} ); + for ( auto & p : fractions ) + std::cout << p.first << '/' << p.second << ", " ; + std::cout << "1/1" << std::endl ; + return 0 ; +} diff --git a/challenge-159/ulrich-rieke/cpp/ch-2.cpp b/challenge-159/ulrich-rieke/cpp/ch-2.cpp new file mode 100644 index 0000000000..85ae8382fe --- /dev/null +++ b/challenge-159/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,41 @@ +#include <iostream> +#include <vector> +#include <set> +#include <cstdlib> + +//the smallest current divisor of a number is a prime number +std::vector<int> primeDecompose( int n ) { + std::vector<int> primes ; + int current = 2 ; + while ( n != 1 ) { + if ( n % current == 0 ) { + primes.push_back( current ) ; + n /= current ; + } + else + current++ ; + } + return primes ; +} + +int main( int argc, char * argv[] ) { + int n = std::atoi( argv[1] ) ; + while ( n <= 0 ) { + std::cout << "Please enter a number greater than 0!\n" ; + std::cin >> n ; + } + std::vector<int> primes { primeDecompose( n ) } ; + std::set<int> uniqueNums( primes.begin( ) , primes.end( ) ) ; + int pl = primes.size( ) ; + int ul = uniqueNums.size( ) ; + if ( pl == ul ) { + if ( pl % 2 == 0 ) + std::cout << 1 ; + else + std::cout << -1 ; + } + else + std::cout << 0 ; + std::cout << std::endl ; + return 0 ; +} diff --git a/challenge-159/ulrich-rieke/haskell/ch-1.hs b/challenge-159/ulrich-rieke/haskell/ch-1.hs new file mode 100644 index 0000000000..84c43f6cf3 --- /dev/null +++ b/challenge-159/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,36 @@ +module Challenge159 + where +import Control.Applicative +import Data.List ( sortBy ) + +keepAskingForInput :: IO Int +keepAskingForInput = do + putStrLn "Please enter a number greater than 0!" + number <- getLine + if ( read number ) > 0 then return $ read number + else do + keepAskingForInput + +solution :: Int -> [String] +solution n = + let pairs = (,) <$> [1 .. n - 1] <*> [1 .. n] + fractions = filter (\p -> (fst p < snd p) && lcm ( fst p ) ( snd p) + == ( (fst p) * ( snd p ))) pairs + sorted = sortBy mySorter fractions + in ["0/1"] ++ map (\p -> (show $ fst p ) ++ "/" ++ ( show $ snd p )) + sorted ++ ["1/1"] + +mySorter :: (Int, Int) -> (Int,Int) -> Ordering +mySorter (a , b ) ( c , d ) + |firstFrac < secondFrac = LT + |firstFrac == secondFrac = EQ + |firstFrac > secondFrac = GT + where + firstFrac = fromIntegral a / fromIntegral b + secondFrac = fromIntegral c / fromIntegral d + +main :: IO ( ) +main = do + n <- keepAskingForInput + list <- return $ solution n + print list diff --git a/challenge-159/ulrich-rieke/haskell/ch-2.hs b/challenge-159/ulrich-rieke/haskell/ch-2.hs new file mode 100644 index 0000000000..1140981ce2 --- /dev/null +++ b/challenge-159/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,45 @@ +module Challenge159_2 + where +import Control.Monad.State.Lazy +import Data.List ( nub ) + +divisors :: Int -> [Int] +divisors n = [d | d <- [2..n] , mod n d == 0] + +decompose :: State (Int , [Int]) [Int] +decompose = do + (d , factors ) <- get + if d == 1 + then return factors + else do + put ( div d ( head $ divisors d ) , factors ++ [ head $ divisors d]) + decompose + +myFactors :: Int -> [Int] +myFactors n = evalState decompose ( n , [] ) + +keepAskingForInput :: IO Int +keepAskingForInput = do + putStrLn "Please enter a number greater than 0!" + number <- getLine + if ( read number ) > 0 then return $ read number + else do + keepAskingForInput + +solution :: Int -> Int +solution n + |len1 == len2 && even len1 = 1 + |len1 == len2 && odd len1 = -1 + |otherwise = 0 + where + factors :: [Int] + factors = myFactors n + len1 :: Int + len1 = length factors + len2 :: Int + len2 = length $ nub factors + +main :: IO ( ) +main = do + n <- keepAskingForInput + putStrLn $ show $ solution n diff --git a/challenge-159/ulrich-rieke/perl/ch-1.pl b/challenge-159/ulrich-rieke/perl/ch-1.pl new file mode 100644 index 0000000000..0ce8192017 --- /dev/null +++ b/challenge-159/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; + +sub primeDecomposition { + my $number = shift ; + my @primes ; + my $current = 2 ; + do { + if ( $number % $current == 0 ) { + push @primes , $current ; + $number /= $current ; + } + else { + $current++ ; + } + } until ( $number == 1 ) ; + return @primes ; +} + +sub myOrder { ($a->[0] / $a->[1]) <=> ($b->[0] / $b->[1] ) } + +sub isCoprime { + my $numbera = shift ; + my $numberb = shift ; + my @firstPrimes = primeDecomposition( $numbera ) ; + my @secondPrimes = primeDecomposition( $numberb ) ; + my %firstFactors ; + for my $n ( @firstPrimes ) { + $firstFactors{$n}++ ; + } + my %secondFactors ; + for my $n ( @secondPrimes ) { + $secondFactors{$n}++ ; + } + my @common ; + for my $n ( keys %firstFactors ) { + if ( exists( $secondFactors{$n} ) ) { + push @common , $n ; + } + } + if ( scalar( @common ) == 0 ) { + return 1 ; + } + else { + return 0 ; + } +} + +my $n = $ARGV[0] ; +while ( $n <= 0 ) { + say "enter a number greater than 0! Re-enter!" ; + $n = <STDIN> ; + chomp $n ; +} +#find all coprime pairs of numerators and denominators between 1 and n - 1 +#and n respectively and order them in ascending order +my @pairs ; +push @pairs , [0 , 1] ; +for my $num (1 .. $n - 1) { + for my $denom( 0 .. $n ) { + if ( ($num < $denom ) && isCoprime( $num , $denom ) ) { + push @pairs , [$num , $denom] ; + } + } +} +my @sorted = sort myOrder @pairs ; +for my $p ( @sorted ) { + print "$p->[0]/$p->[1], " ; +} +say "1/1" ; diff --git a/challenge-159/ulrich-rieke/perl/ch-2.pl b/challenge-159/ulrich-rieke/perl/ch-2.pl new file mode 100644 index 0000000000..cd2862013a --- /dev/null +++ b/challenge-159/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,45 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; + +sub primeDecomposition { + my $number = shift ; + my @primes ; + my $current = 2 ; + do { + if ( $number % $current == 0 ) { + push @primes , $current ; + $number /= $current ; + } + else { + $current++ ; + } + } until ( $number == 1 ) ; + return @primes ; +} + +my $n = $ARGV[0] ; +while ( $n <= 0 ) { + say "Only positive integers are allowed!" ; + $n = <STDIN> ; + chomp $n ; +} +my %primeFactors ; +my @primes = primeDecomposition( $n ) ; +for my $p ( @primes ) { + $primeFactors{$p}++ ; +} +my $primesLen = scalar( @primes ) ; +my $factorLen = scalar( keys %primeFactors ) ; +if ( $primesLen == $factorLen ) { #square-free + if ( $primesLen % 2 == 0 ) { + say 1 ; + } + else { + say -1 ; + } +} +else { + say 0 ; +} diff --git a/challenge-159/ulrich-rieke/raku/ch-1.raku b/challenge-159/ulrich-rieke/raku/ch-1.raku new file mode 100644 index 0000000000..15691e9e97 --- /dev/null +++ b/challenge-159/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,28 @@ +use v6 ; +#find all numbers from 1 to n - 1 in the numerator and from 1 to n +#in the denominator where numerator and denominator are coprime to +#each other and order them in ascending order + +subset Positive of Int where * > 0 ; + +sub pairorder { ($^a[0] / $^a[1]) <=> ($^b[0] / $^b[1]) } + +sub MAIN( Positive $n is copy ) { + my @numerators = (1 .. $n - 1 ) ; + my @denominators = (1 .. $n ) ; + my @fractions ; + @fractions.push( (0 , 1 ) ) ; + for @numerators -> $num { + for @denominators -> $denom { + if ( ($num < $denom) && ($num lcm $denom == + $num * $denom) ) { + @fractions.push( ($num , $denom) ) ; + } + } + } + my @sorted = @fractions.sort( &pairorder ) ; + for @sorted -> $pair { + print "$pair[0]/$pair[1], " ; + } + say "1/1" ; +} diff --git a/challenge-159/ulrich-rieke/raku/ch-2.raku b/challenge-159/ulrich-rieke/raku/ch-2.raku new file mode 100644 index 0000000000..bc66f875b3 --- /dev/null +++ b/challenge-159/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,37 @@ +use v6 ; + +#for theoretical reasons, the smallest divisor of a number must be prime + +subset Positive of Int where * > 0 ; +sub primeDecomposition( Positive $n is copy ) { + my @primeNumbers ; + my $current = 1 ; + while ( $n != 1 ) { + repeat { + $current++ ; + } until ( $n %% $current ) ; + @primeNumbers.push( $current ) ; + $n div= $current ; + $current-- ; # a prime factor might be repeated, in the non-squarefree + # numbers + } + return @primeNumbers ; +} + +sub MAIN( Positive $n is copy ) { + my @primeNumbers = primeDecomposition( $n ) ; + my $primeSet = @primeNumbers.Set ; + my $setLen = $primeSet.elems ; + my $arrayLen = @primeNumbers.elems ; + if ( $setLen == $arrayLen ) { # square-free! + if ( $arrayLen %% 2 ) { + say 1 ; + } + else { + say -1 ; + } + } + else { + say 0 ; + } +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 6f52526a1d..089a41460f 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,4 +1,103 @@ { + "series" : [ + { + "data" : [ + { + "drilldown" : "Dave Jacoby", + "y" : 3, + "name" : "Dave Jacoby" + }, + { + "drilldown" : "E. Choroba", + "y" : 2, + "name" : "E. Choroba" + }, + { + "drilldown" : "Flavio Poletti", + "name" : "Flavio Poletti", + "y" : 6 + }, + { + "drilldown" : "James Smith", + "y" : 3, + "name" : "James Smith" + }, + { + "drilldown" : "Luca Ferrari", + "y" : 8, + "name" : "Luca Ferrari" + }, + { + "drilldown" : "Mark Anderson", + "y" : 2, + "name" : "Mark Anderson" + }, + { + "drilldown" : "Marton Polgar", + "name" : "Marton Polgar", + "y" : 2 + }, + { + "y" : 2, + "name" : "Paulo Custodio", + "drilldown" : "Paulo Custodio" + }, + { + "drilldown" : "PokGoPun", + "y" : 2, + "name" : "PokGoPun" + }, + { + "name" : "Robert DiCicco", + "y" : 2, + "drilldown" : "Robert DiCicco" + }, + { + "drilldown" : "Roger Bell_West", + "y" : 4, + "name" : "Roger Bell_West" + }, + { + "drilldown" : "Simon Proctor", + "name" : "Simon Proctor", + "y" : 2 + }, + { + "drilldown" : "Ulrich Rieke", + "y" : 4, + "name" : "Ulrich Rieke" + } + ], + "name" : "The Weekly Challenge - 159", + "colorByPoint" : 1 + } + ], + "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 + }, + "subtitle" : { + "text" : "[Champions: 13] Last updated at 2022-04-05 20:37:08 GMT" + }, + "xAxis" : { + "type" : "category" + }, + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "enabled" : 1, + "format" : "{point.y}" + } + } + }, + "chart" : { + "type" : "column" + }, + "title" : { + "text" : "The Weekly Challenge - 159" + }, "yAxis" : { "title" : { "text" : "Total Solutions" @@ -10,8 +109,6 @@ "drilldown" : { "series" : [ { - "name" : "Dave Jacoby", - "id" : "Dave Jacoby", "data" : [ [ "Perl", @@ -21,7 +118,9 @@ "Blog", 1 ] - ] + ], + "id" : "Dave Jacoby", + "name" : "Dave Jacoby" }, { "data" : [ @@ -30,8 +129,8 @@ 2 ] ], - "name" : "E. Choroba", - "id" : "E. Choroba" + "id" : "E. Choroba", + "name" : "E. Choroba" }, { "data" : [ @@ -48,10 +147,12 @@ 2 ] ], - "id" : "Flavio Poletti", - "name" : "Flavio Poletti" + "name" : "Flavio Poletti", + "id" : "Flavio Poletti" }, { + "id" : "James Smith", + "name" : "James Smith", "data" : [ [ "Perl", @@ -61,11 +162,11 @@ "Blog", 1 ] - ], - "id" : "James Smith", - "name" : "James Smith" + ] }, { + "id" : "Luca Ferrari", + "name" : "Luca Ferrari", "data" : [ [ "Raku", @@ -75,29 +176,27 @@ "Blog", 6 ] - ], - "id" : "Luca Ferrari", - "name" : "Luca Ferrari" + ] }, { + "id" : "Mark Anderson", + "name" : "Mark Anderson", "data" : [ [ "Raku", 2 ] - ], - "name" : "Mark Anderson", - "id" : "Mark Anderson" + ] }, { - "name" : "Marton Polgar", - "id" : "Marton Polgar", "data" : [ [ "Raku", 2 ] - ] + ], + "id" : "Marton Polgar", + "name" : "Marton Polgar" }, { "data" : [ @@ -120,8 +219,8 @@ "name" : "PokGoPun" }, { - "name" : "Robert DiCicco", "id" : "Robert DiCicco", + "name" : "Robert DiCicco", "data" : [ [ "Perl", @@ -140,8 +239,8 @@ 2 ] ], - "name" : "Roger Bell_West", - "id" : "Roger Bell_West" + "id" : "Roger Bell_West", + "name" : "Roger Bell_West" }, { "data" : [ @@ -152,101 +251,21 @@ ], "name" : "Simon Proctor", "id" : "Simon Proctor" + }, + { + "id" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] + ] } ] - }, - "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/>" - }, - "title" : { - "text" : "The Weekly Challenge - 159" - }, - "chart" : { - "type" : "column" - }, - "subtitle" : { - "text" : "[Champions: 12] Last updated at 2022-04-05 20:19:25 GMT" - }, - "series" : [ - { - "name" : "The Weekly Challenge - 159", - "data" : [ - { - "name" : "Dave Jacoby", - "drilldown" : "Dave Jacoby", - "y" : 3 - }, - { - "y" : 2, - "drilldown" : "E. Choroba", - "name" : "E. Choroba" - }, - { - "y" : 6, - "name" : "Flavio Poletti", - "drilldown" : "Flavio Poletti" - }, - { - "name" : "James Smith", - "drilldown" : "James Smith", - "y" : 3 - }, - { - "y" : 8, - "name" : "Luca Ferrari", - "drilldown" : "Luca Ferrari" - }, - { - "name" : "Mark Anderson", - "drilldown" : "Mark Anderson", - "y" : 2 - }, - { - "name" : "Marton Polgar", - "drilldown" : "Marton Polgar", - "y" : 2 - }, - { - "drilldown" : "Paulo Custodio", - "name" : "Paulo Custodio", - "y" : 2 - }, - { - "name" : "PokGoPun", - "drilldown" : "PokGoPun", - "y" : 2 - }, - { - "y" : 2, - "drilldown" : "Robert DiCicco", - "name" : "Robert DiCicco" - }, - { - "drilldown" : "Roger Bell_West", - "name" : "Roger Bell_West", - "y" : 4 - }, - { - "drilldown" : "Simon Proctor", - "name" : "Simon Proctor", - "y" : 2 - } - ], - "colorByPoint" : 1 - } - ], - "xAxis" : { - "type" : "category" - }, - "plotOptions" : { - "series" : { - "borderWidth" : 0, - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - } - } } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 00ae16ae32..e20266d39d 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,48 +1,15 @@ { "yAxis" : { + "min" : 0, "title" : { "text" : null - }, - "min" : 0 - }, - "tooltip" : { - "pointFormat" : "<b>{point.y:.0f}</b>" - }, - "title" : { - "text" : "The Weekly Challenge Contributions [2019 - 2022]" + } }, "legend" : { "enabled" : "false" }, - "chart" : { - "type" : "column" - }, - "xAxis" : { - "type" : "category", - "labels" : { - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - } - } - }, - "subtitle" : { - "text" : "Last updated at 2022-04-05 20:19:25 GMT" - }, "series" : [ { - "dataLabels" : { - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - }, - "y" : 10, - "align" : "right", - "format" : "{point.y:.0f}", - "enabled" : "true", - "rotation" : -90, - "color" : "#FFFFFF" - }, "data" : [ [ "Blog", @@ -50,14 +17,47 @@ ], [ "Perl", - 7667 + 7669 ], [ "Raku", - 4591 + 4593 ] ], + "dataLabels" : { + "enabled" : "true", + "y" : 10, + "align" : "right", + "color" : "#FFFFFF", + "style" : { + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" + }, + "format" : "{point.y:.0f}", + "rotation" : -90 + }, "name" : "Contributions" } - ] + ], + "subtitle" : { + "text" : "Last updated at 2022-04-05 20:37:08 GMT" + }, + "tooltip" : { + "pointFormat" : "<b>{point.y:.0f}</b>" + }, + "title" : { + "text" : "The Weekly Challenge Contributions [2019 - 2022]" + }, + "chart" : { + "type" : "column" + }, + "xAxis" : { + "type" : "category", + "labels" : { + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + } + } + } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 79632a5045..d7d3f0b7d7 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,15 +1,18 @@ { - "chart" : { - "type" : "column" + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2022-04-05 20:37:08 GMT" + }, + "tooltip" : { + "followPointer" : "true", + "pointFormat" : "<span style=\"color:{point.color}\">Challenge {point.name}</span>: <b>{point.y:f}</b><br/>", + "headerFormat" : "<span style=\"font-size:11px\"></span>" }, "series" : [ { - "name" : "The Weekly Challenge Languages", - "colorByPoint" : "true", "data" : [ { - "name" : "#001", "drilldown" : "001", + "name" : "#001", "y" : 161 }, { @@ -18,9 +21,9 @@ "y" : 125 }, { - "drilldown" : "003", "name" : "#003", - "y" : 83 + "y" : 83, + "drilldown" : "003" }, { "y" : 99, @@ -28,8 +31,8 @@ "drilldown" : "004" }, { - "y" : 78, "name" : "#005", + "y" : 78, "drilldown" : "005" }, { @@ -38,74 +41,74 @@ "drilldown" : "006" }, { - "name" : "#007", "drilldown" : "007", - "y" : 64 + "y" : 64, + "name" : "#007" }, { - "y" : 78, "name" : "#008", + "y" : 78, "drilldown" : "008" }, { - "y" : 76, "name" : "#009", + "y" : 76, "drilldown" : "009" }, { "y" : 65, - "drilldown" : "010", - "name" : "#010" + "name" : "#010", + "drilldown" : "010" }, { + "drilldown" : "011", "y" : 85, - "name" : "#011", - "drilldown" : "011" + "name" : "#011" }, { "drilldown" : "012", - "name" : "#012", - "y" : 89 + "y" : 89, + "name" : "#012" }, { - "name" : "#013", "drilldown" : "013", + "name" : "#013", "y" : 85 }, { + "name" : "#014", "y" : 101, - "drilldown" : "014", - "name" : "#014" + "drilldown" : "014" }, { - "y" : 99, + "drilldown" : "015", "name" : "#015", - "drilldown" : "015" + "y" : 99 }, { + "drilldown" : "016", "y" : 71, - "name" : "#016", - "drilldown" : "016" + "name" : "#016" }, { + "drilldown" : "017", "y" : 84, - "name" : "#017", - "drilldown" : "017" + "name" : "#017" }, { - "drilldown" : "018", "name" : "#018", - "y" : 81 + "y" : 81, + "drilldown" : "018" }, { - "name" : "#019", "drilldown" : "019", - "y" : 103 + "y" : 103, + "name" : "#019" }, { + "name" : "#020", "y" : 101, - "drilldown" : "020", - "name" : "#020" + "drilldown" : "020" }, |
