diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-12-22 22:55:20 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-12-22 22:55:20 +0000 |
| commit | 73bc400637c2c031890e146f4d77e233183504f9 (patch) | |
| tree | 8156da6a0203364a382d4a46fed6a2905e423a70 | |
| parent | 4c2d24678dbd178aa175f579e5a63c37e38efbff (diff) | |
| download | perlweeklychallenge-club-73bc400637c2c031890e146f4d77e233183504f9.tar.gz perlweeklychallenge-club-73bc400637c2c031890e146f4d77e233183504f9.tar.bz2 perlweeklychallenge-club-73bc400637c2c031890e146f4d77e233183504f9.zip | |
- Added solutions by Colin Crain.
| -rw-r--r-- | challenge-039/colin-crain/perl5/ch-1.pl | 150 | ||||
| -rw-r--r-- | challenge-039/colin-crain/perl5/ch-2.pl | 190 | ||||
| -rw-r--r-- | stats/pwc-current.json | 265 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 60 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 614 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 508 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 106 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 40 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 40 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 100 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 34 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 46 |
12 files changed, 1254 insertions, 899 deletions
diff --git a/challenge-039/colin-crain/perl5/ch-1.pl b/challenge-039/colin-crain/perl5/ch-1.pl new file mode 100644 index 0000000000..38380f69fa --- /dev/null +++ b/challenge-039/colin-crain/perl5/ch-1.pl @@ -0,0 +1,150 @@ +#! /opt/local/bin/perl +# +# ch-1.pl +# +# PWC 39 - TASK #1 +# A guest house had a policy that the light remain ON as long as the at +# least one guest is in the house. There is guest book which tracks +# all guest in/out time. Write a script to find out how long in +# minutes the light were ON. +# Guest Book +# 1) Alex IN: 09:10 OUT: 09:45 +# 2) Arnold IN: 09:15 OUT: 09:33 +# 3) Bob IN: 09:22 OUT: 09:55 +# 4) Charlie IN: 09:25 OUT: 10:05 +# 5) Steve IN: 09:33 OUT: 10:01 +# 6) Roger IN: 09:44 OUT: 10:12 +# 7) David IN: 09:57 OUT: 10:23 +# 8) Neil IN: 10:01 OUT: 10:19 +# 9) Chris IN: 10:10 OUT: 11:00 + +# +# method: given the dataset we have, it's fairly obvious the house is +# continuously occupied from the moment the first person enters, 9:10, +# until the time the last person leaves, at 11.00. Roger, the 6th +# person, makes the bridge. However we should design our software to +# be more generally robust in counting, and have the possiblity that +# all should leave before another arrives and the light should be +# turned temporarily off then back on. +# +# A few posits will need to be made before we start: +# 1. a guestbook is a series of entries, where each line is +# entered successively after the previous. Thus we can +# assume the first entry IN will be the earliest time +# recorded. Any time that numerically appears to be earlier +# is in fact rolled over midnight and after that time. The +# same logic applies to IN and OUT times, one must be after +# the other, even if numerically it seems otherwise. +# 2. that time is on a 24 hour clock, so midnight+30 would be +# written as 00:30. This isn't strictly necessary, but no +# am/pm notation is included in the times above, so if this +# were not true we could only count elapsed times within a +# 12 hour block. Again, this doesn't occur in the data, and +# alternately adjusting the conventional notation 12:30 to +# mean 0 hours is straightforward, but it does seem better to +# either do this or add am/pm to the records. As is, if +# someone goes to ground for more than 12 hours in their +# room the system falls apart and maybe the lights go out +# on them. Sitting in the dark is to be avoided for +# reclusive shut-ins, leading to under-stimulation, +# oversleeping, depression and worse, so for the greater +# good 24 hour time it is. +# +# When we look at the first person to come IN, then log the time that +# person went OUT, we know the light was on throughout that time and +# establish a basic window. We can then incrementally look through the +# guestbook entries: if the guest entered before, and left after, the +# end of the window we move the end time of the window up accordingly. +# If the guest enters after the window endtime we calculate the elapsed +# minute total for the window to that point, add it to the accumulator +# and reset the window parameters from that guest's IN and OUT. After +# each guest entry is processed we proceed to the next guestbook entry +# until there are no more. +# +# To make things a little more interesting instead of pasting and +# reading from a __DATA__ section at the end of the script, we'll just +# read and parse this script itself to find the above specification in +# the challenge and config directly from that. You know, because reasons +# or something. As is becoming usual, we will then store everything in a +# data structure and access it from there. In this case it will be an +# array of hashes, each containing the data for one guestbook line, with +# keys for name, IN time, and OUT time. We don't actually use the name, +# but it's nice to remember these are real fictional people we are +# logging the movements of here, with names, faces, loved ones and real +# imaginary lives. Although what they are doing ducking in a guesthouse +# for 17 minutes is anyone's guess. +# +# Given the constraints that no span between IN and OUT, nor span +# between the last guest OUT and the next guest IN is greater than one +# day, or really 23:59, the log entries can span days indefinitely. Add +# some new entries above and you will see for yourself. +# +# +# 2019 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + +use warnings; +use strict; +use feature ":5.26"; + +## ## ## ## ## CONFIG +## times in hh:mm notation are normalized to the number of minutes from the start of the day +open (my $fh, "<", $0) or die "can't open this script thats running this code to read: $0 : $!"; +my @book; +while ( my $line = <$fh> ) { + if ($line =~ /^[)#\s\d]+(\w+)\s+IN: (\d\d:\d\d) OUT: (\d\d:\d\d)/) { + push @book, { name => $1, IN => minutes($2), OUT => minutes($3) }; + } +} + +## ## ## ## ## MAIN + +## start_time establishes our initial reference window. Any timestamp less than +## start_time will in reality represent the following day and so will have 1440 +## added to it. +my $start_time = $book[0]->{IN}; +my $end_time = $book[0]->{OUT}; + +my $accumulated_minutes; + +while (scalar @book) { + ## we shift through the guestbook entries processing them one by one + + ## correct for clock midnight rollovers. Every vertical guestbook entry + ## succeeds the previous, and every OUT time succeeds that entry's IN time. We correct by adding one day in minutes. + if ($book[0]->{IN} < $start_time) { + @{$book[0]}{'IN', 'OUT'} = map { $_ + 1440 } @{$book[0]}{'IN', 'OUT'}; + } + $book[0]->{OUT} += 1440 if $book[0]->{OUT} < $book[0]->{IN}; + + ## log the minutes and restart if this entry is outside the current window + if ($book[0]->{IN} > $end_time) { + $accumulated_minutes += $end_time - $start_time; + $start_time = $book[0]->{IN}; + $end_time = $book[0]->{OUT}; + shift @book; + next; + } + + ## increase the window as required + $end_time = $book[0]->{OUT} if $book[0]->{OUT} > $end_time; + + ## remove the processed entry + shift @book; +} + +## flush the current time window one last time +$accumulated_minutes += $end_time - $start_time; + +say "the light was on for $accumulated_minutes minutes"; + +## ## ## ## ## SUBS + +sub minutes { +## convert hh:mm time into minutes from 00:00 + my $time = shift; + $time =~ s/(\d+):(\d+)/($1 * 60) + $2/e; + return $time; +} diff --git a/challenge-039/colin-crain/perl5/ch-2.pl b/challenge-039/colin-crain/perl5/ch-2.pl new file mode 100644 index 0000000000..15143f7f98 --- /dev/null +++ b/challenge-039/colin-crain/perl5/ch-2.pl @@ -0,0 +1,190 @@ +#! /opt/local/bin/perl +# +# ch-2.pl +# +# PWC 39 - TASK #2 +# Write a script to demonstrate Reverse Polish notation(RPN). Checkout +# the wiki page for more information about RPN. +# +# method: the cited wiki article provides two algorithms, one reading the +# expression left to right the other right to left. I implemented them +# both, but found the former more attractive and extensible. The right +# to left version is included for examination as a subroutine at the +# end. The operations themselves harken back to PWC #34, and here +# again we use a dispatch table of subroutine references to choose the +# different courses of action. +# +# The first algorithm as written handles only binary operations, but +# is easily expanded to include unitary postfix operators, and so I +# did and added a few of those to the dispatch table. In the spirit of +# keeping the specific operator data, code and attributes, together, +# an additional level of indirection is added to the table entries as +# a hash, specifying the number of operands the operator requires in +# addition to the original code reference. This in turn led me to +# considering including operators that don't take any operands at all, +# which is one way to think about constants. Adding pi and e did +# require a slight patch to the splice code, as handing splice 0 +# offset removes the the whole stack and delivers it to the dispatched +# function, which is certainly not what we want, rather than removing +# 0 items from the stack. Oh well. It's rather pathological to bring +# up a function and then ask it to do nothing so this behavior does +# make sense, it's just not what we want. Simply not splicing on 0 +# fixes this nicely. Constants are probably best substituted out +# before we start anyway, like macros, instead of being bits of +# operator code that returns only one thing no matter what, but we're +# getting further afield from the implementation of Reverse Polish +# Notation so we'll just stop here. +# +# running bash here so the factorial ! needs an escape on the +# command line, so we match that as well as the unescaped version. +# It seems easier than making social cases for the shell, which doesn't +# have much to do with demonstrating RPN either. +# +# 2019 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + +use warnings; +use strict; +use feature ":5.26"; + +## ## ## ## ## MAIN +# +# for each token in the postfix expression: +# if token is an operator: +# operand_2 ← pop from the stack +# operand_1 ← pop from the stack +# result ← evaluate token with operand_1 and operand_2 +# push result back onto the stack +# else if token is an operand: +# push token onto the stack +# result ← pop from the stack + +my $expression = shift @ARGV // "2 7 2 3 4 + * ^ -"; +my @exp = split /\s+/, $expression; + +my @stack; + +my $dispatch = { + '+' => { ops => 2, + code => sub { $_[0] + $_[1] } }, + '-' => { ops => 2, + code => sub { $_[0] - $_[1] } }, + '*' => { ops => 2, + code => sub { $_[0] * $_[1] } }, + '/' => { ops => 2, + code => sub { $_[0] / $_[1] } }, + '^' => { ops => 2, + code => sub { $_[0] ** $_[1] } }, + 'sin' => { ops => 1, + code => sub { sin($_[0]) } }, + 'cos' => { ops => 1, + code => sub { cos($_[0]) } }, + 'tan' => { ops => 1, + code => sub { sin($_[0]) / cos($_[0]) } }, + 'sqrt' => { ops => 1, + code => sub { sqrt($_[0]) } }, + '\!' => { ops => 1, + code => \&factorial }, + 'pi' => { ops => 0, + code => sub { 3.14159265359 } }, + 'e' => { ops => 0, + code => sub { 2.71828182846 } }, +}; + +while (scalar @exp) { + my $token = shift @exp; + + ## token is operand + if ($token =~ /^[\d.]+$/) { + push @stack, $token; + } + ## is operator + elsif ( exists $dispatch->{$token} ) { + my @operands = $dispatch->{$token}->{ops} ? splice @stack, -( $dispatch->{$token}->{ops} ) : (); + push @stack, $dispatch->{$token}->{code}->(@operands); + } + ## is unrecognized + else { + say "ERROR: operator $token not recognized."; + exit; + } +} + +say "$expression = $stack[0]\n\n"; + +## uncomment to see the other algorithm +# +# +# r2l_rpn( $expression ); + + +## ## ## ## ## SUBS + +sub factorial { + my $num = shift; + return undef if $num < 0; + return 1 if $num <= 1; + my $out = $num; + while ( --$num > 1) { + $out *= $num; + } + return $out; +} + +sub r2l_rpn { +## implementation of a different algoritm that read the expression +## right-to-left, or really prefix Polish Notation read left-to-right on a +## reversal of the input token array +## +## This algorithm has not been extended to accept unitary operators and constants + +# for each token in the reversed postfix expression: +# if token is an operator: +# push token onto the operator stack +# pending_operand ← False +# else if token is an operand: +# operand ← token +# if pending_operand is True: +# while the operand stack is not empty: +# operand_1 ← pop from the operand stack +# operator ← pop from the operator stack +# operand ← evaluate operator with operand_1 and operand +# push operand onto the operand stack +# pending_operand ← True +# result ← pop from the operand stack + + my $expression = shift; + my @exp = reverse( split /\s+/, $expression); + + my @operators = (); + my @stack = (); + my $pending_operand = 0; + + while (scalar @exp) { + my $token = shift @exp; + my ($op1, $op2); + + if ( $token =~ /^[+\-*\/^]$/) { ## token is operator + push @operators, $token; + $pending_operand = 0; + } + elsif ($token =~ /^[\d.]+$/) { ## token is operand + $op1 = $token; + if ($pending_operand) { + while (scalar @stack) { + $op2 = pop @stack; + my $operator = pop @operators; + $op1 = $dispatch->{$operator}->{code}->($op1, $op2); + } + } + push @stack, $op1; + $pending_operand = 1; + + } + } + + say "output from right-to-left algorithm: $expression = ", pop @stack; + +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 5863c59260..e28b2dc1e0 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,25 +1,143 @@ { + "series" : [ + { + "data" : [ + { + "drilldown" : "Andrezgz", + "y" : 2, + "name" : "Andrezgz" + }, + { + "drilldown" : "Colin Crain", + "name" : "Colin Crain", + "y" : 2 + }, + { + "drilldown" : "Daniel Mita", + "name" : "Daniel Mita", + "y" : 1 + }, + { + "drilldown" : "Duane Powell", + "y" : 2, + "name" : "Duane Powell" + }, + { + "y" : 5, + "name" : "Javier Luque", + "drilldown" : "Javier Luque" + }, + { + "drilldown" : "Kevin Colyer", + "name" : "Kevin Colyer", + "y" : 2 + }, + { + "name" : "Laurent Rosenfeld", + "y" : 5, + "drilldown" : "Laurent Rosenfeld" + }, + { + "y" : 2, + "name" : "Nazareno Delucca", + "drilldown" : "Nazareno Delucca" + }, + { + "drilldown" : "Noud", + "name" : "Noud", + "y" : 2 + }, + { + "y" : 4, + "name" : "Roger Bell West", + "drilldown" : "Roger Bell West" + }, + { + "y" : 4, + "name" : "Ruben Westerberg", + "drilldown" : "Ruben Westerberg" + }, + { + "name" : "Ryan Thompson", + "y" : 5, + "drilldown" : "Ryan Thompson" + }, + { + "y" : 2, + "name" : "Saif Ahmed", + "drilldown" : "Saif Ahmed" + }, + { + "y" : 2, + "name" : "Steven Wilson", + "drilldown" : "Steven Wilson" + }, + { + "drilldown" : "Ulrich Rieke", + "y" : 2, + "name" : "Ulrich Rieke" + } + ], + "name" : "Perl Weekly Challenge - 039", + "colorByPoint" : 1 + } + ], + "title" : { + "text" : "Perl Weekly Challenge - 039" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "tooltip" : { + "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 + }, + "subtitle" : { + "text" : "[Champions: 15] Last updated at 2019-12-22 22:55:05 GMT" + }, + "xAxis" : { + "type" : "category" + }, + "legend" : { + "enabled" : 0 + }, + "chart" : { + "type" : "column" + }, "drilldown" : { "series" : [ { + "name" : "Andrezgz", "data" : [ [ "Perl 5", 2 ] ], - "name" : "Andrezgz", "id" : "Andrezgz" }, { - "id" : "Daniel Mita", - "name" : "Daniel Mita", + "name" : "Colin Crain", + "id" : "Colin Crain", + "data" : [ + [ + "Perl 5", + 2 + ] + ] + }, + { "data" : [ [ "Perl 6", 1 ] - ] + ], + "id" : "Daniel Mita", + "name" : "Daniel Mita" }, { "name" : "Duane Powell", @@ -46,8 +164,8 @@ 1 ] ], - "name" : "Javier Luque", - "id" : "Javier Luque" + "id" : "Javier Luque", + "name" : "Javier Luque" }, { "data" : [ @@ -56,10 +174,11 @@ 2 ] ], - "name" : "Kevin Colyer", - "id" : "Kevin Colyer" + "id" : "Kevin Colyer", + "name" : "Kevin Colyer" }, { + "id" : "Laurent Rosenfeld", "data" : [ [ "Perl 5", @@ -74,32 +193,30 @@ 1 ] ], - "name" : "Laurent Rosenfeld", - "id" : "Laurent Rosenfeld" + "name" : "Laurent Rosenfeld" }, { "name" : "Nazareno Delucca", + "id" : "Nazareno Delucca", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "Nazareno Delucca" + ] }, { "id" : "Noud", - "name" : "Noud", "data" : [ [ "Perl 6", 2 ] - ] + ], + "name" : "Noud" }, { "id" : "Roger Bell West", - "name" : "Roger Bell West", "data" : [ [ "Perl 5", @@ -109,7 +226,8 @@ "Perl 6", 2 ] - ] + ], + "name" : "Roger Bell West" }, { "data" : [ @@ -122,8 +240,8 @@ 2 ] ], - "name" : "Ruben Westerberg", - "id" : "Ruben Westerberg" + "id" : "Ruben Westerberg", + "name" : "Ruben Westerberg" }, { "name" : "Ryan Thompson", @@ -145,13 +263,13 @@ }, { "name" : "Saif Ahmed", + "id" : "Saif Ahmed", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "Saif Ahmed" + ] }, { "id" : "Steven Wilson", @@ -165,27 +283,16 @@ }, { "id" : "Ulrich Rieke", - "name" : "Ulrich Rieke", "data" : [ [ "Perl 6", 2 ] - ] + ], + "name" : "Ulrich Rieke" } ] }, - "legend" : { - "enabled" : 0 - }, - "title" : { - "text" : "Perl Weekly Challenge - 039" - }, - "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/>" - }, "plotOptions" : { "series" : { "dataLabels" : { @@ -194,97 +301,5 @@ }, "borderWidth" : 0 } - }, - "series" : [ - { - "data" : [ - { - "drilldown" : "Andrezgz", - "y" : 2, - "name" : "Andrezgz" - }, - { - "name" : "Daniel Mita", - "y" : 1, - "drilldown" : "Daniel Mita" - }, - { - "y" : 2, - "drilldown" : "Duane Powell", - "name" : "Duane Powell" - }, - { - "drilldown" : "Javier Luque", - "y" : 5, - "name" : "Javier Luque" - }, - { - "name" : "Kevin Colyer", - "y" : 2, - "drilldown" : "Kevin Colyer" - }, - { - "name" : "Laurent Rosenfeld", - "drilldown" : "Laurent Rosenfeld", - "y" : 5 - }, - { - "name" : "Nazareno Delucca", - "y" : 2, - "drilldown" : "Nazareno Delucca" - }, - { - "name" : "Noud", - "y" : 2, - "drilldown" : "Noud" - }, - { - "drilldown" : "Roger Bell West", - "y" : 4, - "name" : "Roger Bell West" - }, - { - "name" : "Ruben Westerberg", - "drilldown" : "Ruben Westerberg", - "y" : 4 - }, - { - "y" : 5, - "drilldown" : "Ryan Thompson", - "name" : "Ryan Thompson" - }, - { - "name" : "Saif Ahmed", - "drilldown" : "Saif Ahmed", - "y" : 2 - }, - { - "name" : "Steven Wilson", - "drilldown" : "Steven Wilson", - "y" : 2 - }, - { - "drilldown" : "Ulrich Rieke", - "y" : 2, - "name" : "Ulrich Rieke" - } - ], - "name" : "Perl Weekly Challenge - 039", - "colorByPoint" : 1 - } - ], - "xAxis" : { - "type" : "category" - }, - "subtitle" : { - "text" : "[Champions: 14] Last updated at 2019-12-22 10:58:35 GMT" - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, - "chart" : { - "type" : "column" } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 4fc81e1769..d5309ba155 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,34 +1,15 @@ { - "yAxis" : { - "title" : { - "text" : null - }, - "min" : 0 + "subtitle" : { + "text" : "Last updated at 2019-12-22 22:55:14 GMT" }, - "xAxis" : { - "labels" : { - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - } - }, - "type" : "category" + "legend" : { + "enabled" : "false" }, "title" : { "text" : "Perl Weekly Challenge Contributions - 2019" }, - "chart" : { - "type" : "column" - }, - "tooltip" : { - "pointFormat" : "<b>{point.y:.0f}</b>" - }, - "legend" : { - "enabled" : "false" - }, "series" : [ { - "name" : "Contributions", "data" : [ [ "Blog", @@ -36,28 +17,47 @@ ], [ "Perl 5", - 1608 + 1610 ], [ "Perl 6", 970 ] ], + "name" : "Contributions", "dataLabels" : { + "color" : "#FFFFFF", "y" : 10, + "format" : "{point.y:.0f}", "align" : "right", - "rotation" : -90, "style" : { "fontFamily" : "Verdana, sans-serif", "fontSize" : "13px" }, - "format" : "{point.y:.0f}", - "color" : "#FFFFFF", - "enabled" : "true" + "enabled" : "true", + "rotation" : -90 } } ], - "subtitle" : { - "text" : "Last updated at 2019-12-22 10:58:52 GMT" + "chart" : { + "type" : "column" + }, + "yAxis" : { + "title" : { + "text" : null + }, + "min" : 0 + }, + "tooltip" : { + "pointFormat" : "<b>{point.y:.0f}</b>" + }, + "xAxis" : { + "labels" : { + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + } + }, + "type" : "category" } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index e89abdea5c..f9e47a239f 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,4 +1,220 @@ { + "series" : [ + { + "data" : [ + { + "drilldown" : "001", + "y" : 140, + "name" : "#001" + }, + { + "name" : "#002", + "y" : 108, + "drilldown" : "002" + }, + { + "drilldown" : "003", + "y" : 71, + "name" : "#003" + }, + { + "name" : "#004", + "drilldown" : "004", + "y" : 91 + }, + { + "y" : 71, + "drilldown" : "005", + "name" : "#005" + }, + { + "y" : 48, + "drilldown" : "006", + "name" : "#006" + }, + { + "drilldown" : "007", + "y" : 56, + "name" : "#007" + }, + { + "name" : "#008", + "drilldown" : "008", + "y" : 70 + }, + { + "name" : "#009", + "y" : 68, + "drilldown" : "009" + }, + { + "y" : 60, + "drilldown" : "010", + "name" : "#010" + }, + { + "name" : "#011", + "y" : 79, + "drilldown" : "011" + }, + { + "y" : 83, + "drilldown" : "012", + "name" : "#012" + }, + { + "drilldown" : "013", + "y" : 76, + "name" : "#013" + }, + { + "name" : "#014", + "drilldown" : "014", + "y" : 96 + }, + { + "drilldown" : "015", + "y" : 93, + "name" : "#015" + }, + { + "name" : "#016", + "drilldown" : "016", + "y" : 66 + }, + { + "name" : "#017", + "drilldown" : "017", + "y" : 79 + }, + { + "y" : 76, + "drilldown" : "018", + "name" : "#018" + }, + { + "drilldown" : "019", + "y" : 95, + "name" : "#019" + }, + { + "name" : "#020", + "drilldown" : "020", + "y" : 95 + }, + { + "y" : 67, + "drilldown" : "021", + "name" : "#021" + }, + { + "drilldown" : "022", + "y" : 63, + "name" : "#022" + }, + { + "drilldown" : "023", + "y" : 91, + "name" : "#023" + }, + { + "name" : "#024", + "y" : 70, + "drilldown" : "024" + }, + { + "y" : 55, + "drilldown" : "025", + "name" : "#025" + }, + { + "name" : "#026", + "drilldown" : "026", + "y" : 70 + }, + { + "name" : "#027", + "y" : 58, + "drilldown" : "027" + }, + { + "name" : "#028", + "y" : 78, + "drilldown" : "028" + }, + { + "y" : 77, + "drilldown" : "029", + "name" : "#029" + }, + { + "y" : 115, + "drilldown" : "030", + "name" : "#030" + }, + { + "drilldown" : "031", + "y" : 87, + "name" : "#031" + }, + { + "drilldown" : "032", < |
