diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-11-10 10:26:22 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-11-10 10:26:22 +0000 |
| commit | db5f4dd8cc11b3b8a1c39652381b23ba12e13145 (patch) | |
| tree | fc055ee432397e8c2ca90daafa9626b0d5484d71 | |
| parent | 427727f4d73b3d49f31120487cfef905aee9e179 (diff) | |
| download | perlweeklychallenge-club-db5f4dd8cc11b3b8a1c39652381b23ba12e13145.tar.gz perlweeklychallenge-club-db5f4dd8cc11b3b8a1c39652381b23ba12e13145.tar.bz2 perlweeklychallenge-club-db5f4dd8cc11b3b8a1c39652381b23ba12e13145.zip | |
- Added solutions by Colin Crain.
| -rw-r--r-- | challenge-033/colin-crain/perl5/ch-1.pl | 87 | ||||
| -rw-r--r-- | challenge-033/colin-crain/perl5/ch-2.pl | 141 | ||||
| -rw-r--r-- | stats/pwc-current.json | 443 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 66 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 246 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 542 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 104 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 90 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 108 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 40 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 108 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 316 |
12 files changed, 1267 insertions, 1024 deletions
diff --git a/challenge-033/colin-crain/perl5/ch-1.pl b/challenge-033/colin-crain/perl5/ch-1.pl new file mode 100644 index 0000000000..0555636159 --- /dev/null +++ b/challenge-033/colin-crain/perl5/ch-1.pl @@ -0,0 +1,87 @@ +#! /opt/local/bin/perl +# +# count_letters.pl +# +# PWC33 - Task #1 +# Count Letters (A..Z) +# Create a script that accepts one or more files specified on the +# command-line and count the number of times letters appeared in the +# files. +# +# So with the following input file sample.txt +# +# The quick brown fox jumps over the lazy dog. +# +# the script would display something like: +# +# a: 1 +# b: 1 +# c: 1 +# d: 1 +# e: 3 +# f: 1 +# g: 1 +# h: 2 +# i: 1 +# j: 1 +# k: 1 +# l: 1 +# m: 1 +# n: 1 +# o: 4 +# p: 1 +# q: 1 +# r: 2 +# s: 1 +# t: 2 +# u: 2 +# v: 1 +# w: 1 +# x: 1 +# y: 1 +# z: 1 +# +# method: the main points of interest here are the local setting of $/, +# the input record separator, to undef so on reading the entire +# file will get slurped up in one go. After that the slurped file +# is quickly reduced to an array-shaped pile of letters by the awesome +# power of the +# +# grep {/[a-z]/} split //, lc() +# +# combination. This is then iterated through with each letter +# occurance incrementing a hash value. The resultant hash is then +# sorted and displayed. +# +# colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + +use warnings; +use strict; +use feature ":5.26"; + +## ## ## ## ## MAIN + +my @args = @ARGV; +my $counter = {}; + +for my $file ( @args ) { + if (! -f $file) { die "argument $file is not a valid file "}; + open (my $fh, "<", $file) || die; { "file read error: \'$file\' cannot be opened" }; + local $/ = undef; ## locally set the line separator to undef so we slurp the entire file + my $text = <$fh>; + close $fh; + + my @letters = grep {/[a-z]/} split //, lc($text); + for my $letter ( @letters ){ + $counter->{$letter}++; + } +} + +## output the hash +for my $key (sort keys $counter->%*) { + printf "%3s: %-d\n", $key, $counter->{$key}; + +} diff --git a/challenge-033/colin-crain/perl5/ch-2.pl b/challenge-033/colin-crain/perl5/ch-2.pl new file mode 100644 index 0000000000..d9d1007f64 --- /dev/null +++ b/challenge-033/colin-crain/perl5/ch-2.pl @@ -0,0 +1,141 @@ +#! /opt/local/bin/perl +# +# multiplication.pl +# +# PWC 33 - Task #2 +# Formatted Multiplication Table +# Write a script to print 11x11 multiplication table, only the top half triangle. +# +# x| 1 2 3 4 5 6 7 8 9 10 11 +# ---+-------------------------------------------- +# 1| 1 2 3 4 5 6 7 8 9 10 11 +# 2| 4 6 8 10 12 14 16 18 20 22 +# 3| 9 12 15 18 21 24 27 30 33 +# 4| 16 20 24 28 32 36 40 44 +# 5| 25 30 35 40 45 50 55 +# 6| 36 42 48 54 60 66 +# 7| 49 56 63 70 77 +# 8| 64 72 80 88 +# 9| 81 90 99 +# 10| 100 110 +# 11| 121 +# +# method: well, there is one quite straightforward way to output the table +# above, and that is to simply output the table above. This satifies +# the letter if perhaps not the spirt of the challenge. That +# function can be examined in +# +# sub cheap_and_dirty() +# +# below. +# +# With that out of the way, the table can be algorithmically produced +# by an incrementing loop in turn iterating over all of the values +# greater than the loop value, up to a given maximum, in this case 11. +# Multipliying one value times the other will produce first all of the +# 1 x products starting with 1, then the 2 x products starting with +# 2, etc. A map function inside an anonymous list will produce the +# required values. +# +# In printing the table, to construct the triangle we can use a +# printf function with a dynamic format string, with a builder within +# each iteration using either numeric specifiers or blank spaces as +# required; this in turn is fed by the mapped list of products +# mentioned above. Easy peasy. The header row, the x-axis index, is +# nearly identical to the 1 x product row, so it can be considered a +# special case version of that, as is the dividing row, which can be +# considered a special case using entirely dashes instead of spaces +# or numbers. These are printed during the first iteration, before +# the first 1 x product row. +# +# But this is a general algorithm and can be applied to any upper +# bound, so we can replace the fixed value 11 as a maximum and +# in corelated calculated coefficiants with a variable, $range. +# However if the spacing is fixed, say at the 4 characters used by +# the sample 11x11 times table above, problems will arise in the +# formatting, because large values will eventually exceed the space +# provided and the table will no longer look pretty. This cannot +# stand, as after all we have gone to great lengths to prettify the +# output. We are saved from an ugly and miserable existance by +# creating precalculated spacer variables specifiying the number of +# characters required to fit the output products and factors +# involved; we can substitute these values into our printf formats +# and the table will automatically scale as required to fit the +# output values. +# +# The range of the table is set in the $range variable below. Try +# setting other values. My machine begins to grind a bit in the mid +# five figures somewhere. +# +# YMMV. +# +# 2019 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + +use warnings; +use strict; +use feature ":5.26"; + +## ## ## ## ## CONFIG + +## this is specified by the challenge to 11, for an 11x11 times table, but can be set in this version to any positive integer +my $range = shift @ARGV // 11; ## change the 11 here or use a command line argument + +## ## ## ## ## MAIN + +draw_times_table($range); + +say "\n"; + +## or, alternately: +cheap_and_dirty(); + + + + +## ## ## ## ## SUBS + +sub draw_times_table { + my $range = shift; + + ## autoscaling calculations: + ## we need to gather some basic spatial characteristics of the table we will draw + my $space = scalar( split //, ($range * $range) ) + 1; ## count of chars required to fit largest number_format + 1 extra + my $digits = scalar( split //, ($range) ) + 1; ## count of chars taken by the original specified range number + 1 extra + my $product_format = '%' . $space . 'd'; ## the format substring to print the largest product within the correct width + my $number_format = '%' . $digits . 'd'; ## the format substring to print a factor within the correct width + + ## draw the table: + for my $i (1..$range) { + ## header index and dashed line + if ( $i == 1) { + my $format = (" " x ($digits-1)) . "x|" . ((" " x $space) x ($i-1)) . ($product_format) x ($range - ($i-1)) . "\n"; + my $dash_format = ("-" x ($digits)) . "+" . (("-" x $space) x $range) . "\n"; + printf "$format", (map { $i * $_ } ($i..$range)); + printf "$dash_format"; + }; + ## table rows + my $format = $number_format . "|" . ((" " x $space) x ($i-1)) . ($product_format) x ($range - ($i-1)) . "\n"; + printf "$format", $i, (map { $i * $_} ($i..$range)); + } +} + +sub cheap_and_dirty { +say<<__END__ + x| 1 2 3 4 5 6 7 8 9 10 11 +---+-------------------------------------------- + 1| 1 2 3 4 5 6 7 8 9 10 11 + 2| 4 6 8 10 12 14 16 18 20 22 + 3| 9 12 15 18 21 24 27 30 33 + 4| 16 20 24 28 32 36 40 44 + 5| 25 30 35 40 45 50 55 + 6| 36 42 48 54 60 66 + 7| 49 56 63 70 77 + 8| 64 72 80 88 + 9| 81 90 99 + 10| 100 110 + 11| 121 +__END__ +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 8213ca3e56..a12025452b 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,26 +1,195 @@ { - "xAxis" : { - "type" : "category" - }, + "series" : [ + { + "data" : [ + { + "name" : "Andrezgz", + "y" : 2, + "drilldown" : "Andrezgz" + }, + { + "drilldown" : "Arne Sommer", + "y" : 3, + "name" : "Arne Sommer" + }, + { + "drilldown" : "Bruce Van Allen", + "name" : "Bruce Van Allen", + "y" : 2 + }, + { + "name" : "Colin Crain", + "y" : 2, + "drilldown" : "Colin Crain" + }, + { + "drilldown" : "Daniel Mita", + "name" : "Daniel Mita", + "y" : 1 + }, + { + "drilldown" : "Darren Bottin", + "name" : "Darren Bottin", + "y" : 2 + }, + { + "y" : 2, + "name" : "Dave Cross", + "drilldown" : "Dave Cross" + }, + { + "y" : 2, + "name" : "Dave Jacoby", + "drilldown" : "Dave Jacoby" + }, + { + "name" : "Dr James A. Smith", + "y" : 2, + "drilldown" : "Dr James A. Smith" + }, + { + "drilldown" : "Duane Powell", + "y" : 2, + "name" : "Duane Powell" + }, + { + "drilldown" : "E. Choroba", + "name" : "E. Choroba", + "y" : 2 + }, + { + "drilldown" : "Javier Luque", + "y" : 5, + "name" : "Javier Luque" + }, + { + "drilldown" : "Kevin Colyer", + "name" : "Kevin Colyer", + "y" : 2 + }, + { + "y" : 2, + "name" : "Lars Thegler", + "drilldown" : "Lars Thegler" + }, + { + "name" : "Laurent Rosenfeld", + "y" : 5, + "drilldown" : "Laurent Rosenfeld" + }, + { + "drilldown" : "Mark Anderson", + "y" : 1, + "name" : "Mark Anderson" + }, + { + "drilldown" : "Markus Holzer", + "y" : 2, + "name" : "Markus Holzer" + }, + { + "name" : "Nazareno Delucca", + "y" : 2, + "drilldown" : "Nazareno Delucca" + }, + { + "name" : "Noud", + "y" : 2, + "drilldown" : "Noud" + }, + { + "y" : 2, + "name" : "Petr Roubicek", + "drilldown" : "Petr Roubicek" + }, + { + "y" : 2, + "name" : "Prajith P", + "drilldown" : "Prajith P" + }, + { + "name" : "Richard Nuttall", + "y" : 2, + "drilldown" : "Richard Nuttall" + }, + { + "y" : 5, + "name" : "Roger Bell West", + "drilldown" : "Roger Bell West" + }, + { + "drilldown" : "Ruben Westerberg", + "name" : "Ruben Westerberg", + "y" : 4 + }, + { + "drilldown" : "Ryan Thompson", + "y" : 4, + "name" : "Ryan Thompson" + }, + { + "drilldown" : "Simon Proctor", + "name" : "Simon Proctor", + "y" : 2 + }, + { + "y" : 2, + "name" : "Steven Wilson", + "drilldown" : "Steven Wilson" + }, + { + "drilldown" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "y" : 4 + } + ], + "name" : "Perl Weekly Challenge - 033", + "colorByPoint" : 1 + } + ], "yAxis" : { "title" : { "text" : "Total Solutions" } }, + "subtitle" : { + "text" : "[Champions: 28] Last updated at 2019-11-10 10:25:57 GMT" + }, + "chart" : { + "type" : "column" + }, + "xAxis" : { + "type" : "category" + }, + "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" : { + "borderWidth" : 0, + "dataLabels" : { + "enabled" : 1, + "format" : "{point.y}" + } + } + }, "drilldown" : { "series" : [ { + "id" : "Andrezgz", + "name" : "Andrezgz", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "Andrezgz", - "name" : "Andrezgz" + ] }, { "id" : "Arne Sommer", + "name" : "Arne Sommer", "data" : [ [ "Perl 6", @@ -30,8 +199,7 @@ "Blog", 1 ] - ], - "name" : "Arne Sommer" + ] }, { "data" : [ @@ -46,12 +214,22 @@ { "data" : [ [ - "Perl 6", - 1 + "Perl 5", + 2 ] ], + "name" : "Colin Crain", + "id" : "Colin Crain" + }, + { "id" : "Daniel Mita", - "name" : "Daniel Mita" + "name" : "Daniel Mita", + "data" : [ + [ + "Perl 6", + 1 + ] + ] }, { "name" : "Darren Bottin", @@ -64,24 +242,24 @@ ] }, { - "id" : "Dave Cross", "data" : [ [ "Perl 5", 2 ] ], + "id" : "Dave Cross", "name" : "Dave Cross" }, { + "id" : "Dave Jacoby", "name" : "Dave Jacoby", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "Dave Jacoby" + ] }, { "name" : "Dr James A. Smith", @@ -95,26 +273,25 @@ }, { "name" : "Duane Powell", + "id" : "Duane Powell", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "Duane Powell" + ] }, { + "id" : "E. Choroba", "name" : "E. Choroba", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "E. Choroba" + ] }, { - "id" : "Javier Luque", "data" : [ [ "Perl 5", @@ -129,21 +306,22 @@ 1 ] ], - "name" : "Javier Luque" + "name" : "Javier Luque", + "id" : "Javier Luque" }, { - "name" : "Kevin Colyer", - "id" : "Kevin Colyer", "data" : [ [ "Perl 6", 2 ] - ] + ], + "name" : "Kevin Colyer", + "id" : "Kevin Colyer" }, { - "name" : "Lars Thegler", "id" : "Lars Thegler", + "name" : "Lars Thegler", "data" : [ [ "Perl 5", @@ -170,48 +348,48 @@ "name" : "Laurent Rosenfeld" }, { - "id" : "Mark Anderson", "data" : [ [ "Perl 5", 1 ] ], + "id" : "Mark Anderson", "name" : "Mark Anderson" }, { - "name" : "Markus Holzer", - "id" : "Markus Holzer", "data" : [ [ "Perl 6", 2 ] - ] + ], + "id" : "Markus Holzer", + "name" : "Markus Holzer" }, { + "id" : "Nazareno Delucca", "name" : "Nazareno Delucca", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "Nazareno Delucca" + ] }, { - "name" : "Noud", "data" : [ [ "Perl 6", 2 ] ], - "id" : "Noud" + "id" : "Noud", + "name" : "Noud" }, { - "name" : "Petr Roubicek", "id" : "Petr Roubicek", + "name" : "Petr Roubicek", "data" : [ [ "Perl 5", @@ -221,25 +399,27 @@ }, { "id" : "Prajith P", + "name" : "Prajith P", "data" : [ [ "Perl 5", 2 ] - ], - "name" : "Prajith P" + ] }, { + "name" : "Richard Nuttall", + "id" : "Richard Nuttall", "data" : [ [ "Perl 6", 2 ] - ], - "id" : "Richard Nuttall", - "name" : "Richard Nuttall" + ] }, { + "id" : "Roger Bell West", + "name" : "Roger Bell West", "data" : [ [ "Perl 5", @@ -253,12 +433,11 @@ "Blog", 1 ] - ], - "id" : "Roger Bell West", - "name" : "Roger Bell West" + ] }, { "id" : "Ruben Westerberg", + "name" : "Ruben Westerberg", "data" : [ [ "Perl 5", @@ -268,10 +447,11 @@ "Perl 6", 2 ] - ], - "name" : "Ruben Westerberg" + ] }, { + "id" : "Ryan Thompson", + "name" : "Ryan Thompson", "data" : [ [ "Perl 5", @@ -281,9 +461,7 @@ "Perl 6", 2 ] - ], - "id" : "Ryan Thompson", - "name" : "Ryan Thompson" + ] }, { "name" : "Simon Proctor", @@ -306,8 +484,6 @@ ] }, { - "name" : "Ulrich Rieke", - "id" : "Ulrich Rieke", "data" : [ [ "Perl 5", @@ -317,177 +493,16 @@ "Perl 6", 2 ] - ] + ], + "id" : "Ulrich Rieke", + "name" : "Ulrich Rieke" } ] }, - "chart" : { - "type" : "column" - }, - "plotOptions" : { - "series" : { - "borderWidth" : 0, - "dataLabels" : { - "enabled" : 1, - "format" : "{point.y}" - } - } + "legend" : { + "enabled" : 0 }, "title" : { "text" : "Perl Weekly Challenge - 033" - }, - "subtitle" : { - "text" : "[Champions: 27] Last updated at 2019-11-09 20:29:17 GMT" - }, - "tooltip" : { - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", - "followPointer" : 1, - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>" - }, - "series" : [ - { - "data" : [ - { - "name" : "Andrezgz", - "y" : 2, - "drilldown" : "Andrezgz" - }, - { - "name" : "Arne Sommer", - "y" : 3, - "drilldown" : "Arne Sommer" - }, - { - "drilldown" : "Bruce Van Allen", - "y" : 2, - "name" : "Bruce Van Allen" - }, - { - "drilldown" : "Daniel Mita", - "name" : "Daniel Mita", - "y" : 1 - }, - { - "drilldown" : "Darren Bottin", - "name" : "Darren Bottin", - "y" : 2 - }, - { - "drilldown" : "Dave Cross", - "y" : 2, - "name" : "Dave Cross" - }, - { - "drilldown" : "Dave Jacoby", - "y" : 2, - "name" : "Dave Jacoby" - }, - { - "name" : "Dr James A. Smith", - "y" : 2, - "drilldown" : "Dr James A. Smith" - }, - { - "y" : 2, - "name" : "Duane Powell", - "drilldown" : "Duane Powell" - }, - { - "drilldown" : "E. Choroba", - "name" : "E. Choroba", - "y" : 2 - }, - { - "name" : "Javier Luque", - "y" : 5, - "drilldown" : "Javier Luque" - }, - { - "drilldown" : "Kevin Colyer", - "y" : 2, - "name" : "Kevin Colyer" - }, - { - "drilldown" : "Lars Thegler", - "name" : "Lars Thegler", - "y" : 2 - }, - { - "name" : "Laurent Rosenfeld", - "y" : 5, - "drilldown" : "Laurent Rosenfeld" - }, - { - "drilldown" : "Mark Anderson", - "name" : "Mark Anderson", - "y" : 1 - }, - { - "y" : 2, - "name" : "Markus Holzer", - "drilldown" : "Markus Holzer" - }, - { - "drilldown" : "Nazareno Delucca", - "name" : "Nazareno Delucca", - "y" : 2 - }, - { - "y" : 2, - "name" : "Noud", - "drilldown" : "Noud" - }, - { - "drilldown" : "Petr Roubicek", - "name" : "Petr Roubicek", - "y" : 2 - }, - { - "y" : 2, - "name" : "Prajith P", - "drilldown" : "Prajith P" - }, - { - "name" : "Richard Nuttall", - "y" : 2, - "drilldown" : "Richard Nuttall" - }, - { - "name" : "Roger Bell West", - "y" : 5, - "drilldown" : "Roger Bell West" - }, - { - "y" : 4, - "name" : "Ruben Westerberg", - "drilldown" : "Ruben Westerberg" - }, - { - "y" : 4, - "name" : "Ryan Thompson", - "drilldown" : "Ryan Thompson" - }, - { - "drilldown" : "Simon Proctor", - "y" : 2, - "name" : "Simon Proctor" - }, - { - "drilldown" : "Steven Wilson", - "name" : "Steven Wilson", - "y" : 2 - }, - { - "drilldown" : "Ulrich Rieke", - "name" : "Ulrich Rieke", - "y" : 4 - } - ], - "name" : "Perl Weekly Challenge - 033", - "colorByPoint" : 1 - } - ], - "legend" : { - "enabled" : 0 } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 8f16f02260..c3cb1cfc6f 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,48 +1,30 @@ { - "title" : { - "text" : "Perl Weekly Challenge Contributions - 2019" - }, "legend" : { "enabled" : "false" }, - "chart" : { - "type" : "column" - }, "tooltip" : { "pointFormat" : "<b>{point.y:.0f}</b>" }, - "yAxis" : { - "min" : 0, - "title" : { - "text" : null - } - }, - "subtitle" : { - "text" : "Last updated at 2019-11-09 20:29:31 GMT" - }, "xAxis" : { - "type" : "category", "labels" : { "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" } + }, + "type" : "category" + }, + "chart" : { + "type" : "column" + }, + "yAxis" : { + "min" : 0, + "title" : { + "text" : null } }, "series" : [ { - "dataLabels" : { - "format" : "{point.y:.0f}", - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - }, - "enabled" : "true", - "align" : "right", - "color" : "#FFFFFF", - "rotation" : -90, - "y" : 10 - }, "name" : "Contributions", "data" : [ [ @@ -51,13 +33,31 @@ ], [ "Perl 5", - 1400 + 1402 ], [ "Perl 6", 828 ] - ] + ], + "dataLabels" : { + "y" : 10, + "format" : "{point.y:.0f}", + "rotation" : -90, + "align" : "right", + "enabled" : "true", + "color" : "#FFFFFF", + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + } + } } - ] + ], + "subtitle" : { + "text" : "Last updated at 2019-11-10 10:26:16 GMT" + }, + "title" : { + "text" : "Perl Weekly Challenge Contributions - 2019" + } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index caf99f4ea2..98055b528a 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,4 +1,7 @@ { + "xAxis" : { + "type" : "category" + }, "drilldown" : { "series" : [ { @@ -20,6 +23,7 @@ "name" : "001" }, { + "name" : "002", "data" : [ [ "Perl 5", @@ -34,7 +38,6 @@ 9 ] ], - "name" : "002", "id" : "002" }, { @@ -56,8 +59,6 @@ "id" : "003" }, { - "id" : "004", - "name" : "004", "data" : [ [ "Perl 5", @@ -71,10 +72,12 @@ "Blog", 9 ] - ] + ], + "name" : "004", + "id" : "004" }, { - "name" : "005", + "id" : "005", "data" : [ [ "Perl 5", @@ -89,9 +92,10 @@ 11 ] ], - "id" : "005" |
