From 0b3e22eaa7919c245aafaefd724b8cfd7fcb612d Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Fri, 25 Jun 2021 20:00:53 +0100 Subject: - Added solutions by Pete Houston. --- challenge-118/pete-houston/perl/ch-1.pl | 28 + challenge-118/pete-houston/perl/ch-2.pl | 260 ++ stats/pwc-current.json | 357 +-- stats/pwc-language-breakdown-summary.json | 40 +- stats/pwc-language-breakdown.json | 4698 ++++++++++++++--------------- stats/pwc-leaders.json | 372 +-- stats/pwc-summary-1-30.json | 32 +- stats/pwc-summary-121-150.json | 96 +- stats/pwc-summary-151-180.json | 46 +- stats/pwc-summary-181-210.json | 36 +- stats/pwc-summary-211-240.json | 86 +- stats/pwc-summary-31-60.json | 102 +- stats/pwc-summary-61-90.json | 100 +- stats/pwc-summary-91-120.json | 42 +- stats/pwc-summary.json | 46 +- 15 files changed, 3322 insertions(+), 3019 deletions(-) create mode 100644 challenge-118/pete-houston/perl/ch-1.pl create mode 100644 challenge-118/pete-houston/perl/ch-2.pl diff --git a/challenge-118/pete-houston/perl/ch-1.pl b/challenge-118/pete-houston/perl/ch-1.pl new file mode 100644 index 0000000000..24533994c1 --- /dev/null +++ b/challenge-118/pete-houston/perl/ch-1.pl @@ -0,0 +1,28 @@ +#!/usr/bin/env perl +#=============================================================================== +# +# FILE: 11801.pl +# +# USAGE: ./11801.pl N +# +# DESCRIPTION: Print 1 if the decimal natural number N is a palindrome +# when written as binary, 0 otherwise. +# +# REQUIREMENTS: Bit::Manip +# AUTHOR: Pete Houston (pete), cpan@openstrike.co.uk +# ORGANIZATION: Openstrike +# VERSION: 1.0 +# CREATED: 21/06/21 +#=============================================================================== + +use strict; +use warnings; +use Bit::Manip 'bit_bin'; + +my ($n) = shift =~ /^([1-9][0-9]*)$/ or die "Argument must be positive int\n"; +my $bin = bit_bin ($n); +my $ispal = reverse ($bin) eq $bin ? 1 : 0; + +print "$ispal as binary representation of $n is $bin which is " + . ($ispal ? '' : 'NOT ') + . "a palindrome.\n"; diff --git a/challenge-118/pete-houston/perl/ch-2.pl b/challenge-118/pete-houston/perl/ch-2.pl new file mode 100644 index 0000000000..905c882819 --- /dev/null +++ b/challenge-118/pete-houston/perl/ch-2.pl @@ -0,0 +1,260 @@ +#!/usr/bin/env perl +#=============================================================================== +# +# FILE: 11802.pl +# +# USAGE: ./11802.pl [ -v N ] +# +# DESCRIPTION: Knight moves: hop around the board collecting the treasure +# +# OPTIONS: -v specifies the verbosity level: +# 0 = minimum verbosity (default) +# 1 = debug (show target picking, etc.) +# 2 = trace (show maths, move choices, etc.) +# REQUIREMENTS: Getopt::Std +# BUGS: Not optimal. Code could be much neater, too. +# NOTES: See POD for full details +# AUTHOR: Pete Houston (pete), cpan@openstrike.co.uk +# ORGANIZATION: Openstrike +# VERSION: 1.0 +# CREATED: 21/06/21 +#=============================================================================== + +use strict; +use warnings; + +use Getopt::Std; + +=head1 Knight Moves + +This is a 1st-order solution to task 2 of Challenge 118 (0th order being +the brute-force visit-all-the-squares approach). It attempts to be +semi-smart in determining how and whither the knight should move. + +=head2 Algorithm + +A target is chosen by least square distance from the knight. This target +is pursued and will be the next acquired unless any other target is just +one move away at any point during this pursuit. + +The pursuit of the target varies depending on the distance to it. +Sufficiently far-off targets (square distance > 5) are approached +directly with the larger difference of x and y getting the larger step. + +When the target is closer (within 2 squares) we pick one of the 2 +possible best known moves, always preferring squares we have not visited +before. + +Once a treasure has been acquired it is removed from the list and the +next target chosen. + +When no targets are left, the quest is complete. + +The algorithm does not distinguish between equidistant objects when +choosing the next target, so starting at a8 the nearest targets are the +equidistant c4 and e6. Clearly e6 is preferable as it involves less +backtracking but the algorithm ingores this and just chooses randomly +between them. Scope for improvement. + +As it stands for the given starting point and treasure distribution the +algorithm takes between 12 and 16 moves inclusive to gather all the +treasure. + +=head2 Co-ordinates + +Rather than faff about with letters and numbers internally we will use a +catesian grid with 0,0 at a1 and 7,7 at h8. These are converted to +chess notation on output for the benefit of the user. Debugging messages +may inlcude the internal representations. + +=cut + +# Do we want the verbose output? +my $DEBUG = 0; +{ + my %opts; + $Getopt::Std::STANDARD_HELP_VERSION = 1; + getopts ('v:', \%opts) or die "Bad options.\n"; + $DEBUG = $opts{v} if defined ($opts{v}) && $opts{v} =~ /^[012]$/; + debug (1, "Debugging at level $DEBUG enabled.\n"); +} + +# Start position - alter this if you want a different puzzle +my @kpos = (0, 7); # a8 + +# Target positions - alter these if you want a different puzzle +my %tpos = ( + '0,1' => 1, + '1,0' => 1, + '1,1' => 1, + '1,2' => 1, + '2,3' => 1, + '4,5' => 1, +); + +# How does a knight move +my @moves = ( + [ 2, 1], [ 2, -1], + [-2, 1], [-2, -1], + [ 1, 2], [ 1, -2], + [-1, 2], [-1, -2] +); + +my @targets = map { [split /,/] } keys %tpos; +my $next; +my @log; +my %visited; + +print "Starting at " . pstr (@kpos) . "\n"; +OUTER: while (keys %tpos) { + $visited{"@kpos"} = 1; + # Is any target a valid jump from here? If so, snaffle it. + for my $t (@targets) { + my $move = [$t->[0] - $kpos[0], $t->[1] - $kpos[1]]; + if (grep { "@$_" eq "@$move" } @moves) { + @kpos = @$t; + print "Moved to " . pstr (@kpos) . " and snaffled treasure\n"; + push @log, [@kpos]; + delete $tpos{join ',', @$t}; + @targets = map { [split /,/] } keys %tpos; + undef $next; + next OUTER; + } + } + + # Find closest target and navigate towards it. + my $nsqd = 0; + unless (defined $next) { + my @dists = map { ($_->[0] - $kpos[0]) ** 2 + ($_->[1] -$kpos[1]) ** 2 } + @targets; + my $ni = 0; + for (0 .. $#dists) { + $ni = $_ if $dists[$_] < $dists[$ni]; + } + $next = $targets[$ni]; + $nsqd = $dists[$ni]; + debug (1, "Nearest target is at " . pstr (@$next) . + " (sq distance = $nsqd)\n"); + } else { + $nsqd = ($next->[0] - $kpos[0]) ** 2 + ($next->[1] - $kpos[1]) ** 2; + debug (2, "Square distance to next target = $nsqd\n"); + } + + # Which is the way to go to now? + if ($nsqd == 1) { + # Get it to where it is 2 away, so 1 or 2 choices + # Move is 1 to the target and then 2 away sideways + # kpos = x,y targ = x + n, y + m where n,m is some combo of +-1 + # and 0. + debug (2, "Target is 1 lateral space away\n"); + my @opts = $next->[0] eq $kpos[0] ? + ([$kpos[0] + 2, $next->[1]], [$kpos[0] - 2, $next->[1]]) : + ([$next->[0], $kpos[1] + 2], [$next->[0], $kpos[1] - 2]); + @kpos = @{best_choice (@opts)}; + } elsif ($nsqd == 2) { + # Next diagonal, so up to 2 choices + # kpos = x,y targ = x +/- 1, y +/- 1 + debug (2, "Target is 1 diagonal space away\n"); + my @opts = ([$kpos[0] + ($next->[0] - $kpos[0]) * 2, + $kpos[1] + ($kpos[1] - $next->[1])], + [$kpos[0] + ($kpos[0] - $next->[0]), + $kpos[1] + ($next->[1] - $kpos[1]) * 2]); + my $best = best_choice (@opts); + # There may be no valid choices if we are hemmed in a corner + unless (defined $best) { + # Just pick a valid one + $best = best_choice ( + map { [ $_->[0] + $kpos[0], $_->[1] + $kpos[1] ] } + @moves ); + } + @kpos = @$best; + } elsif ($nsqd == 4) { + # 2 away, so 1 or 2 choices + # kpos = x,y targ = x + n, y + m where n,m is some combo of +-2 + # and 0. + debug (2, "Target is 2 lateral spaces away\n"); + my @opts = $next->[0] eq $kpos[0] ? + ([$kpos[0] + 2, $kpos[1] + ($next->[1] - $kpos[1]) / 2], + [$kpos[0] - 2, $kpos[1] + ($next->[1] - $kpos[1]) / 2]) : + ([$kpos[0] + ($next->[0] - $kpos[0]) / 2, $kpos[1] + 2], + [$kpos[0] + ($next->[0] - $kpos[0]) / 2, $kpos[1] - 2]); + @kpos = @{best_choice (@opts)}; + } else { + # Too far away to worry. Just head in the general direction + debug (2, "Target is far away - heading towards it\n"); + my $dx = $next->[0] - $kpos[0]; + my $dy = $next->[1] - $kpos[1]; + debug (2, "dx = $dx, dy = $dy\n"); + my @move; + if (abs ($dx) > abs ($dy)) { + my $x = $kpos[0] + ($dx > 0 ? 2 : -2); + my $ychange = $dy > 0 ? 1 : -1; + @move = ([$x, $kpos[1] + $ychange], + [$x, $kpos[1] - $ychange]); + } else { + my $y = $kpos[1] + ($dy > 0 ? 2 : -2); + my $xchange = $dx > 0 ? 1 : -1; + @move = ([$kpos[0] + $xchange, $y], + [$kpos[0] - $xchange, $y]); + } + my $best = best_choice (@move); + @kpos = @$best; + } + print "Moved to " . pstr (@kpos) . "\n"; + push @log, [@kpos]; +} + +print "\nMade " . @log . " moves visiting " . + (1 + keys %visited) . " squares.\n"; + +=head2 Subroutines + +=head3 best_choice + +Given an array of positions (each an arrayref) return the one arrayref +which is decided to be the "best", or undef if none are on the board. + +=cut + +sub best_choice { + my @possibles = @_; + + debug (1, "Considering " . scalar @possibles . " moves\n"); + debug (2, "Possibles are: " . + join (',', map { "($_->[0], $_->[1])" } @possibles) . "\n"); + # Rule out any impossibles + @possibles = grep { $_->[0] < 8 && $_->[0] > -1 + && $_->[1] < 8 && $_->[1] > -1 } @possibles; + return unless scalar @possibles; + debug (1, "Have " . scalar @possibles . " valid moves\n"); + + # Pick one that we've not visited before (if any) + my ($best) = grep { ! $visited{"@$_"} } @possibles; + return $best // $possibles[0]; +} + +=head3 pstr + +Given the position of the knight as an array of ints, translate into +standard chess notation and return that string suitable for printing. + +=cut + +sub pstr { + my ($x, $y) = @_; + $x = chr ($x + 97); + $y++; + return "$x$y"; +} + +=head3 debug + +Given a debug level (1, 2) and a string output the string if the debug +is at the relevant level. + +=cut + +sub debug { + my ($l, $str) = @_; + print $str if $DEBUG >= $l; +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 91406f94b4..756f5e16e5 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,149 +1,17 @@ { - "legend" : { - "enabled" : 0 - }, - "tooltip" : { - "headerFormat" : "{series.name}
", - "pointFormat" : "{point.name}: {point.y:f}
", - "followPointer" : 1 - }, - "title" : { - "text" : "Perl Weekly Challenge - 118" - }, - "xAxis" : { - "type" : "category" - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, - "series" : [ - { - "colorByPoint" : 1, - "name" : "Perl Weekly Challenge - 118", - "data" : [ - { - "name" : "Cheok-Yin Fung", - "drilldown" : "Cheok-Yin Fung", - "y" : 2 - }, - { - "drilldown" : "Dave Jacoby", - "y" : 3, - "name" : "Dave Jacoby" - }, - { - "drilldown" : "Duane Powell", - "y" : 2, - "name" : "Duane Powell" - }, - { - "y" : 2, - "drilldown" : "E. Choroba", - "name" : "E. Choroba" - }, - { - "name" : "Flavio Poletti", - "drilldown" : "Flavio Poletti", - "y" : 6 - }, - { - "name" : "James Smith", - "y" : 3, - "drilldown" : "James Smith" - }, - { - "drilldown" : "Jorg Sommrey", - "y" : 2, - "name" : "Jorg Sommrey" - }, - { - "drilldown" : "Lance Wicks", - "y" : 2, - "name" : "Lance Wicks" - }, - { - "drilldown" : "Laurent Rosenfeld", - "y" : 3, - "name" : "Laurent Rosenfeld" - }, - { - "drilldown" : "Lucas Ransan", - "y" : 2, - "name" : "Lucas Ransan" - }, - { - "drilldown" : "Mohammad S Anwar", - "y" : 1, - "name" : "Mohammad S Anwar" - }, - { - "name" : "Niels van Dijke", - "y" : 1, - "drilldown" : "Niels van Dijke" - }, - { - "name" : "Paulo Custodio", - "drilldown" : "Paulo Custodio", - "y" : 2 - }, - { - "name" : "Roger Bell_West", - "drilldown" : "Roger Bell_West", - "y" : 4 - }, - { - "drilldown" : "Simon Green", - "y" : 3, - "name" : "Simon Green" - }, - { - "name" : "Steven Wilson", - "drilldown" : "Steven Wilson", - "y" : 1 - }, - { - "y" : 4, - "drilldown" : "Stuart Little", - "name" : "Stuart Little" - }, - { - "name" : "Vinod Kumar K", - "y" : 1, - "drilldown" : "Vinod Kumar K" - }, - { - "name" : "W. Luis Mochan", - "drilldown" : "W. Luis Mochan", - "y" : 3 - } - ] - } - ], - "plotOptions" : { - "series" : { - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - }, - "borderWidth" : 0 - } - }, "drilldown" : { "series" : [ { - "id" : "Cheok-Yin Fung", "data" : [ [ "Perl", 2 ] ], + "id" : "Cheok-Yin Fung", "name" : "Cheok-Yin Fung" }, { - "name" : "Dave Jacoby", "data" : [ [ "Perl", @@ -154,7 +22,8 @@ 1 ] ], - "id" : "Dave Jacoby" + "id" : "Dave Jacoby", + "name" : "Dave Jacoby" }, { "data" : [ @@ -163,20 +32,22 @@ 2 ] ], - "id" : "Duane Powell", - "name" : "Duane Powell" + "name" : "Duane Powell", + "id" : "Duane Powell" }, { - "id" : "E. Choroba", "data" : [ [ "Perl", 2 ] ], + "id" : "E. Choroba", "name" : "E. Choroba" }, { + "name" : "Flavio Poletti", + "id" : "Flavio Poletti", "data" : [ [ "Perl", @@ -190,12 +61,11 @@ "Blog", 2 ] - ], - "id" : "Flavio Poletti", - "name" : "Flavio Poletti" + ] }, { "id" : "James Smith", + "name" : "James Smith", "data" : [ [ "Perl", @@ -205,8 +75,7 @@ "Blog", 1 ] - ], - "name" : "James Smith" + ] }, { "data" : [ @@ -215,12 +84,10 @@ 2 ] ], - "id" : "Jorg Sommrey", - "name" : "Jorg Sommrey" + "name" : "Jorg Sommrey", + "id" : "Jorg Sommrey" }, { - "name" : "Lance Wicks", - "id" : "Lance Wicks", "data" : [ [ "Perl", @@ -230,7 +97,9 @@ "Blog", 1 ] - ] + ], + "id" : "Lance Wicks", + "name" : "Lance Wicks" }, { "data" : [ @@ -247,12 +116,12 @@ 1 ] ], - "id" : "Laurent Rosenfeld", - "name" : "Laurent Rosenfeld" + "name" : "Laurent Rosenfeld", + "id" : "Laurent Rosenfeld" }, { - "name" : "Lucas Ransan", "id" : "Lucas Ransan", + "name" : "Lucas Ransan", "data" : [ [ "Raku", @@ -261,36 +130,47 @@ ] }, { - "name" : "Mohammad S Anwar", - "id" : "Mohammad S Anwar", "data" : [ [ "Perl", 1 ] - ] + ], + "name" : "Mohammad S Anwar", + "id" : "Mohammad S Anwar" }, { - "name" : "Niels van Dijke", - "id" : "Niels van Dijke", "data" : [ [ "Perl", 1 ] - ] + ], + "name" : "Niels van Dijke", + "id" : "Niels van Dijke" }, { + "id" : "Paulo Custodio", "name" : "Paulo Custodio", "data" : [ [ "Perl", 2 ] - ], - "id" : "Paulo Custodio" + ] }, { + "name" : "Pete Houston", + "id" : "Pete Houston", + "data" : [ + [ + "Perl", + 2 + ] + ] + }, + { + "id" : "Roger Bell_West", "name" : "Roger Bell_West", "data" : [ [ @@ -305,11 +185,9 @@ "Blog", 1 ] - ], - "id" : "Roger Bell_West" + ] }, { - "id" : "Simon Green", "data" : [ [ "Perl", @@ -320,17 +198,18 @@ 1 ] ], + "id" : "Simon Green", "name" : "Simon Green" }, { + "id" : "Steven Wilson", + "name" : "Steven Wilson", "data" : [ [ "Perl", 1 ] - ], - "id" : "Steven Wilson", - "name" : "Steven Wilson" + ] }, { "data" : [ @@ -353,10 +232,11 @@ 1 ] ], - "id" : "Vinod Kumar K", - "name" : "Vinod Kumar K" + "name" : "Vinod Kumar K", + "id" : "Vinod Kumar K" }, { + "name" : "W. Luis Mochan", "id" : "W. Luis Mochan", "data" : [ [ @@ -367,15 +247,150 @@ "Blog", 1 ] - ], - "name" : "W. Luis Mochan" + ] } ] }, - "chart" : { - "type" : "column" + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + } + } + }, + "legend" : { + "enabled" : 0 + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "series" : [ + { + "data" : [ + { + "y" : 2, + "drilldown" : "Cheok-Yin Fung", + "name" : "Cheok-Yin Fung" + }, + { + "name" : "Dave Jacoby", + "drilldown" : "Dave Jacoby", + "y" : 3 + }, + { + "drilldown" : "Duane Powell", + "name" : "Duane Powell", + "y" : 2 + }, + { + "y" : 2, + "name" : "E. Choroba", + "drilldown" : "E. Choroba" + }, + { + "y" : 6, + "drilldown" : "Flavio Poletti", + "name" : "Flavio Poletti" + }, + { + "y" : 3, + "drilldown" : "James Smith", + "name" : "James Smith" + }, + { + "y" : 2, + "name" : "Jorg Sommrey", + "drilldown" : "Jorg Sommrey" + }, + { + "y" : 2, + "drilldown" : "Lance Wicks", + "name" : "Lance Wicks" + }, + { + "drilldown" : "Laurent Rosenfeld", + "name" : "Laurent Rosenfeld", + "y" : 3 + }, + { + "y" : 2, + "drilldown" : "Lucas Ransan", + "name" : "Lucas Ransan" + }, + { + "name" : "Mohammad S Anwar", + "drilldown" : "Mohammad S Anwar", + "y" : 1 + }, + { + "y" : 1, + "name" : "Niels van Dijke", + "drilldown" : "Niels van Dijke" + }, + { + "y" : 2, + "drilldown" : "Paulo Custodio", + "name" : "Paulo Custodio" + }, + { + "y" : 2, + "name" : "Pete Houston", + "drilldown" : "Pete Houston" + }, + { + "drilldown" : "Roger Bell_West", + "name" : "Roger Bell_West", + "y" : 4 + }, + { + "y" : 3, + "drilldown" : "Simon Green", + "name" : "Simon Green" + }, + { + "name" : "Steven Wilson", + "drilldown" : "Steven Wilson", + "y" : 1 + }, + { + "drilldown" : "Stuart Little", + "name" : "Stuart Little", + "y" : 4 + }, + { + "name" : "Vinod Kumar K", + "drilldown" : "Vinod Kumar K", + "y" : 1 + }, + { + "y" : 3, + "name" : "W. Luis Mochan", + "drilldown" : "W. Luis Mochan" + } + ], + "colorByPoint" : 1, + "name" : "Perl Weekly Challenge - 118" + } + ], + "tooltip" : { + "headerFormat" : "{series.name}
", + "followPointer" : 1, + "pointFormat" : "{point.name}: {point.y:f}
" + }, + "xAxis" : { + "type" : "category" + }, + "title" : { + "text" : "Perl Weekly Challenge - 118" }, "subtitle" : { - "text" : "[Champions: 19] Last updated at 2021-06-25 18:52:56 GMT" + "text" : "[Champions: 20] Last updated at 2021-06-25 18:59:43 GMT" + }, + "chart" : { + "type" : "column" } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index e3590c8ed0..d57f49ce45 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,9 +1,24 @@ { + "xAxis" : { + "type" : "category", + "labels" : { + "style" : { + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" + } + } + }, + "tooltip" : { + "pointFormat" : "{point.y:.0f}" + }, "chart" : { "type" : "column" }, "subtitle" : { - "text" : "Last updated at 2021-06-25 18:52:56 GMT" + "text" : "Last updated at 2021-06-25 18:59:43 GMT" + }, + "title" : { + "text" : "Perl Weekly Challenge Contributions [2019 - 2020]" }, "series" : [ { @@ -14,7 +29,7 @@ ], [ "Perl", - 5599 + 5601 ], [ "Raku", @@ -22,32 +37,20 @@ ] ], "dataLabels" : { - "color" : "#FFFFFF", - "y" : 10, - "rotation" : -90, "format" : "{point.y:.0f}", + "y" : 10, + "color" : "#FFFFFF", "style" : { "fontFamily" : "Verdana, sans-serif", "fontSize" : "13px" }, + "rotation" : -90, "align" : "right", "enabled" : "true" }, "name" : "Contributions" } ], - "title" : { - "text" : "Perl Weekly Challenge Contributions [2019 - 2020]" - }, - "xAxis" : { - "labels" : { - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - } - }, - "type" : "category" - }, "yAxis" : { "min" : 0, "title" : { @@ -56,8 +59,5 @@ }, "legend" : { "enabled" : "false" - }, - "tooltip" : { - "pointFormat" : "{point.y:.0f}" } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index be35a700c4..56456356e2 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,9 +1,4 @@ { - "tooltip" : { - "followPointer" : "true", - "headerFormat" : "", - "pointFormat" : "Challenge {point.name}: {point.y:f}
" - }, "legend" : { "enabled" : "false" }, @@ -12,2149 +7,6 @@ "text" : "Total Solutions" } }, - "xAxis" : { - "type" : "category" - }, - "title" : { - "text" : "Perl Weekly Challenge Language" - }, - "drilldown" : { - "series" : [ - { - "id" : "001", - "data" : [ - [ - "Perl", - 103 - ], - [ - "Raku", - 47 - ], - [ - "Blog", - 11 - ] - ], - "name" : "001" - }, - { - "data" : [ - [ - "Perl", - 79 - ], - [ - "Raku", - 36 - ], - [ - "Blog", - 10 - ] - ], - "id" : "002", - "name" : "002" - }, - { - "id" : "003", - "data" : [ - [ - "Perl", - 42 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 9 - ] - ], - "name" : "003" - }, - { - "id" : "004", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 10 - ] - ], - "name" : "004" - }, - { - "data" : [ - [ - "Perl", - 40 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 12 - ] - ], - "id" : "005", - "name" : "005" - }, - { - "name" : "006", - "id" : "006", - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 18 - ], - [ - "Blog", - 7 - ] - ] - }, - { - "name" : "007", - "id" : "007", - "data" : [ - [ - "Perl", - 31 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 10 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 44 - ], - [ - "Raku", - 22 - ], - [ - "Blog", - 12 - ] - ], - "id" : "008", - "name" : "008" - }, - { - "name" : "009", - "id" : "009", - "data" : [ - [ - "Perl", - 42 - ], - [ - "Raku", - 21 - ], - [ - "Blog", - 13 - ] - ] - }, - { - "name" : "010", - "id" : "010", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 19 - ], - [ - "Blog", - 11 - ] - ] - }, - { - "name" : "011", - "id" : "011", - "data" : [ - [ - "Perl", - 47 - ], - [ - "Raku", - 28 - ], - [ - "Blog", - 10 - ] - ] - }, - { - "name" : "012", - "data" : [ - [ - "Perl", - 48 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 11 - ] - ], - "id" : "012" - }, - { - "id" : "013", - "data" : [ - [ - "Perl", - 47 - ], - [ - "Raku", - 25 - ], - [ - "Blog", - 13 - ] - ], - "name" : "013" - }, - { - "data" : [ - [ - "Perl", - 55 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 15 - ] - ], - "id" : "014", - "name" : "014" - }, - { - "name" : "015", - "id" : "015", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 28 - ], - [ - "Blog", - 15 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 36 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 12 - ] - ], - "id" : "016", - "name" : "016" - }, - { - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 27 - ], - [ - "Blog", - 12 - ] - ], - "id" : "017", - "name" : "017" - }, - { - "id" : "018", - "data" : [ - [ - "Perl", - 36 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 14 - ] - ], - "name" : "018" - }, - { - "id" : "019", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 13 - ] - ], - "name" : "019" - }, - { - "name" : "020", - "data" : [ - [ - "Perl", - 51 - ], - [ - "Raku", - 37 - ], - [ - "Blog", - 13 - ] - ], - "id" : "020" - }, - { - "name" : "021", - "data" : [ - [ - "Perl", - 38 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 10 - ] - ], - "id" : "021" - }, - { - "id" : "022", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 10 - ] - ], - "name" : "022" - }, - { - "name" : "023", - "data" : [ - [ - "Perl", - 53 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 12 - ] - ], - "id" : "023" - }, - { - "data" : [ - [ - "Perl", - 37 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 11 - ] - ], - "id" : "024", - "name" : "024" - }, - { - "name" : "025", - "id" : "025", - "data" : [ - [ - "Perl", - 28 - ], - [ - "Raku", - 19 - ], - [ - "Blog", - 12 - ] - ] - }, - { - "name" : "026", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 29 - ], - [ - "Blog", - 10 - ] - ], - "id" : "026" - }, - { - "name" : "027", - "id" : "027", - "data" : [ - [ - "Perl", - 29 - ], - [ - "Raku", - 22 - ], - [ - "Blog", - 9 - ] - ] - }, - { - "name" : "028", - "id" : "028", - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 9 - ] - ] - }, - { - "name" : "029", - "data" : [ - [ - "Perl", - 40 - ], - [ - "Raku", - 27 - ], - [ - "Blog", - 12 - ] - ], - "id" : "029" - }, - { - "data" : [ - [ - "Perl", - 74 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 10 - ] - ], - "id" : "030", - "name" : "030" - }, - { - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 9 - ] - ], - "id" : "031", - "name" : "031" - }, - { - "data" : [ - [ - "Perl", - 57 - ], - [ - "Raku", - 27 - ], - [ - "Blog", - 10 - ] - ], - "id" : "032", - "name" : "032" - }, - { - "id" : "033", - "data" : [ - [ - "Perl", - 62 - ], - [ - "Raku", - 38 - ], - [ - "Blog", - 10 - ] - ], - "name" : "033" - }, - { - "data" : [ - [ - "Perl", - 30 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 11 - ] - ], - "id" : "034", - "name" : "034" - }, - { - "id" : "035", - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 22 - ], - [ - "Blog", - 9 - ] - ], - "name" : "035" - }, - { - "id" : "036", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 22 - ], - [ - "Blog", - 11 - ] - ], - "name" : "036" - }, - { - "name" : "037", - "data" : [ - [ - "Perl", - 34 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 9 - ] - ], - "id" : "037" - }, - { - "id" : "038", - "data" : [ - [ - "Perl", - 32 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 12 - ] - ], - "name" : "038" - }, - { - "name" : "039", - "id" : "039", - "data" : [ - [ - "Perl", - 29 - ], - [ - "Raku", - 21 - ], - [ - "Blog", - 12 - ] - ] - }, - { - "name" : "040", - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 10 - ] - ], - "id" : "040" - }, - { - "id" : "041", - "data" : [ - [ - "Perl", - 37 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 9 - ] - ], - "name" : "041" - }, - { - "id" : "042", - "data" : [ - [ - "Perl", - 47 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 11 - ] - ], - "name" : "042" - }, - { - "name" : "043", - "id" : "043", - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 11 - ] - ] - }, - { - "name" : "044", - "data" : [ - [ - "Perl", - 41 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 11 - ] - ], - "id" : "044" - }, - { - "name" : "045", - "id" : "045", - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 35 - ], - [ - "Blog", - 11 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 44 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 10 - ] - ], - "id" : "046", - "name" : "046" - }, - { - "id" : "047", - "data" : [ - [ - "Perl", - 43 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 10 - ] - ], - "name" : "047" - }, - { - "data" : [ - [ - "Perl", - 59 - ], - [ - "Raku", - 37 - ], - [ - "Blog", - 12 - ] - ], - "id" : "048", - "name" : "048" - }, - { - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 27 - ], - [ - "Blog", - 12 - ] - ], - "id" : "049", - "name" : "049" - }, - { - "name" : "050", - "id" : "050", - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 36 - ], - [ - "Blog", - 12 - ] - ] - }, - { - "id" : "051", - "data" : [ - [ - "Perl", - 46 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 11 - ] - ], - "name" : "051" - }, - { - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 14 - ] - ], - "id" : "052", - "name" : "052" - }, - { - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 41 - ], - [ - "Blog", - 15 - ] - ], - "id" : "053", - "name" : "053" - }, - { - "id" : "054", - "data" : [ - [ - "Perl", - 45 - ], - [ - "Raku", - 40 - ], - [ - "Blog", - 18 - ] - ], - "name" : "054" - }, - { - "data" : [ - [ - "Perl", - 41 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 14 - ] - ], - "id" : "055", - "name" : "055" - }, - { - "name" : "056", - "data" : [ - [ - "Perl", - 47 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 16 - ] - ], - "id" : "056" - }, - { - "id" : "057", - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 15 - ] - ], - "name" : "057" - }, - { - "name" : "058", - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 13 - ] - ], - "id" : "058" - }, - { - "name" : "059", - "id" : "059", - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 16 - ] - ] - }, - { - "name" : "060", - "id" : "060", - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 16 - ] - ] - }, - { - "name" : "061", - "data" : [ - [ - "Perl", - 37 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 14 - ] - ], - "id" : "061" - }, - { - "name" : "062", - "data" : [ - [ - "Perl", - 28 - ], - [ - "Raku", - 19 - ], - [ - "Blog", - 11 - ] - ], - "id" : "062" - }, - { - "data" : [ - [ - "Perl", - 42 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 13 - ] - ], - "id" : "063", - "name" : "063" - }, - { - "name" : "064", - "data" : [ - [ - "Perl", - 35 - ], - [ - "Raku", - 29 - ], - [ - "Blog", - 16 - ] - ], - "id" : "064" - }, - { - "name" : "065", - "id" : "065", - "data" : [ - [ - "Perl", - 32 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 15 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 14 - ] - ], - "id" : "066", - "name" : "066" - }, - { - "name" : "067", - "id" : "067", - "data" : [ - [ - "Perl", - 38 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 18 - ] - ] - }, - { - "name" : "068", - "id" : "068", - "data" : [ - [ - "Perl", - 33 - ], - [ - "Raku", - 29 - ], - [ - "Blog", - 13 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 39 - ], - [ - "Raku", - 28 - ], - [ - "Blog", - 16 - ] - ], - "id" : "069", - "name" : "069" - }, - { - "id" : "070", - "data" : [ - [ - "Perl", - 42 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 17 - ] - ], - "name" : "070" - }, - { - "name" : "071", - "id" : "071", - "data" : [ - [ - "Perl", - 31 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 15 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 51 - ], - [ - "Raku", - 42 - ], - [ - "Blog", - 19 - ] - ], - "id" : "072", - "name" : "072" - }, - { - "name" : "073", - "id" : "073", - "data" : [ - [ - "Perl", - 53 - ], - [ - "Raku", - 40 - ], - [ - "Blog", - 17 - ] - ] - }, - { - "name" : "074", - "id" : "074", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 39 - ], - [ - "Blog", - 20 - ] - ] - }, - { - "id" : "075", - "data" : [ - [ - "Perl", - 55 - ], - [ - "Raku", - 38 - ], - [ - "Blog", - 20 - ] - ], - "name" : "075" - }, - { - "name" : "076", - "data" : [ - [ - "Perl", - 51 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 16 - ] - ], - "id" : "076" - }, - { - "id" : "077", - "data" : [ - [ - "Perl", - 50 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 14 - ] - ], - "name" : "077" - }, - { - "name" : "078", - "data" : [ - [ - "Perl", - 68 - ], - [ - "Raku", - 41 - ], - [ - "Blog", - 18 - ] - ], - "id" : "078" - }, - { - "name" : "079", - "id" : "079", - "data" : [ - [ - "Perl", - 68 - ], - [ - "Raku", - 37 - ], - [ - "Blog", - 17 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 75 - ], - [ - "Raku", - 36 - ], - [ - "Blog", - 16 - ] - ], - "id" : "080", - "name" : "080" - }, - { - "data" : [ - [ - "Perl", - 65 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 15 - ] - ], - "id" : "081", - "name" : "081" - }, - { - "id" : "082", - "data" : [ - [ - "Perl", - 62 - ], - [ - "Raku", - 35 - ], - [ - "Blog", - 17 - ] - ], - "name" : "082" - }, - { - "id" : "083", - "data" : [ - [ - "Perl", - 73 - ], - [ - "Raku", - 38 - ], - [ - "Blog", - 16 - ] - ], - "name" : "083" - }, - { - "data" : [ - [ - "Perl", - 71 - ], - [ - "Raku", - 36 - ], - [ - "Blog", - 12 - ] - ], - "id" : "084", - "name" : "084" - }, - { - "name" : "085", - "data" : [ - [ - "Perl", - 64 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 18 - ] - ], - "id" : "085" - }, - { - "name" : "086", - "id" : "086", - "data" : [ - [ - "Perl", - 58 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 15 - ] - ] - }, - { - "name" : "087", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 31 - ], - [ - "Blog", - 14 - ] - ], - "id" : "087" - }, - { - "name" : "088", - "data" : [ - [ - "Perl", - 65 - ], - [ - "Raku", - 36 - ], - [ - "Blog", - 20 - ] - ], - "id" : "088" - }, - { - "name" : "089", - "id" : "089", - "data" : [ - [ - "Perl", - 59 - ], - [ - "Raku", - 34 - ], - [ - "Blog", - 20 - ] - ] - }, - { - "data" : [ - [ - "Perl", - 57 - ], - [ - "Raku", - 39 - ], - [ - "Blog", - 17 - ] - ], - "id" : "090", - "name" : "090" - }, - { - "name" : "091", - "id" : "091", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 36 - ], - [ - "Blog", - 16 - ] - ] - }, - { - "name" : "092", - "id" : "092", - "data" : [ - [ - "Perl", - 52 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 16 - ] - ] - }, - { - "name" : "093", - "data" : [ - [ - "Perl", - 46 - ], - [ - "Raku", - 25 - ], - [ - "Blog", - 16 - ] - ], - "id" : "093" - }, - { - "data" : [ - [ - "Perl", - 44 - ], - [ - "Raku", - 26 - ], - [ - "Blog", - 17 - ] - ], - "id" : "094", - "name" : "094" - }, - { - "name" : "095", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 33 - ], - [ - "Blog", - 19 - ] - ], - "id" : "095" - }, - { - "name" : "096", - "data" : [ - [ - "Perl", - 52 - ], - [ - "Raku", - 37 - ], - [ - "Blog", - 19 - ] - ], - "id" : "096" - }, - { - "name" : "097", - "id" : "097", - "data" : [ - [ - "Perl", - 63 - ], - [ - "Raku", - 29 - ], - [ - "Blog", - 19 - ] - ] - }, - { - "name" : "098", - "data" : [ - [ - "Perl", - 59 - ], - [ - "Raku", - 32 - ], - [ - "Blog", - 17 - ] - ], - "id" : "098" - }, - { - "id" : "099", - "data" : [ - [ - "Perl", - 56 - ], - [ - "Raku", - 27 - ], - [ - "Blog", - 14 - ] - ], - "name" : "099" - }, - { - "id" : "100", - "data" : [ - [ - "Perl", - 69 - ], - [ - "Raku", - 30 - ], - [ - "Blog", - 21 - ] - ], - "name" : "100" - }, - { - "name" : "101", - "data" : [ - [ - "Perl", - 46 - ], - [ - "Raku", - 24 - ], - [ - "Blog", - 13 - ] - ], - "id" : "101" - }, - { - "id" : "102", - "data" : [ - [ - "Perl", - 52 - ], - [ - "Raku", - 23 - ], - [ - "Blog", - 15 - ] -