diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-02-21 04:20:31 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-02-21 04:20:31 +0000 |
| commit | 557c74ebe992c09731a36aee2e607e189a7c41fe (patch) | |
| tree | decc88863a2ba6059fc4ce1446c1593ba8d65426 | |
| parent | 3ecda691e55e12a99e5294d1ebc50c884746e81a (diff) | |
| download | perlweeklychallenge-club-557c74ebe992c09731a36aee2e607e189a7c41fe.tar.gz perlweeklychallenge-club-557c74ebe992c09731a36aee2e607e189a7c41fe.tar.bz2 perlweeklychallenge-club-557c74ebe992c09731a36aee2e607e189a7c41fe.zip | |
- Added solutions by Colin Crain.
| -rwxr-xr-x | challenge-152/colin-crain/perl/ch-1.pl | 146 | ||||
| -rwxr-xr-x | challenge-152/colin-crain/perl/ch-2.pl | 170 | ||||
| -rwxr-xr-x | challenge-152/colin-crain/raku/ch-1.raku | 22 | ||||
| -rwxr-xr-x | challenge-152/colin-crain/raku/ch-2.raku | 68 | ||||
| -rw-r--r-- | stats/pwc-current.json | 240 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 48 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 994 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 706 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 92 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 32 | ||||
| -rw-r--r-- | stats/pwc-summary-151-180.json | 104 | ||||
| -rw-r--r-- | stats/pwc-summary-181-210.json | 114 | ||||
| -rw-r--r-- | stats/pwc-summary-211-240.json | 20 | ||||
| -rw-r--r-- | stats/pwc-summary-241-270.json | 46 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 20 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 34 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 126 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 540 |
18 files changed, 1968 insertions, 1554 deletions
diff --git a/challenge-152/colin-crain/perl/ch-1.pl b/challenge-152/colin-crain/perl/ch-1.pl new file mode 100755 index 0000000000..6ad1905161 --- /dev/null +++ b/challenge-152/colin-crain/perl/ch-1.pl @@ -0,0 +1,146 @@ +#!/Users/colincrain/perl5/perlbrew/perls/perl-5.32.0/bin/perl
+#
+# paths-of-least-resistance.pl
+#
+# Triangle Sum Path
+# Submitted by: Mohammad S Anwar
+# You are given a triangle array.
+#
+# Write a script to find the minimum sum path from top to bottom.
+#
+# Example 1:
+# Input: $triangle = [ [1], [5,3], [2,3,4], [7,1,0,2], [6,4,5,2,8] ]
+#
+# 1
+# 5 3
+# 2 3 4
+# 7 1 0 2
+# 6 4 5 2 8
+#
+# Output: 8
+#
+# Minimum Sum Path = 1 + 3 + 2 + 0 + 2 => 8
+# Example 2:
+# Input: $triangle = [ [5], [2,3], [4,1,5], [0,1,2,3], [7,2,4,1,9] ]
+#
+# 5
+# 2 3
+# 4 1 5
+# 0 1 2 3
+# 7 2 4 1 9
+#
+# Output: 9
+#
+# Minimum Sum Path = 5 + 2 + 1 + 0 + 1 => 9
+
+# method:
+#
+# This took me bit, understanding what exactly was meant by the
+# idea of a "minimum sum path". A triangle, to me, implies a
+# directed graph of some sort, which would involve navigating
+# the edges in some optimal fashion.
+#
+# A quick study of the examples shows this not to be the case.
+# In fact, for lack of some flash of insight I can't seem to
+# come up with much of a reason at all for using those terms to
+# descibe what we are being asked to do. I mean, its not wrong,
+# per se, just not very illuminating.
+#
+# The first two ideas, "minimum" and "sum" speak for
+# themselves, and the smallest total value from a sequence of
+# addition is indeed what we want. It's the "path" part that
+# strikes me as the part that will cause confusion. The term
+# path generally spaks to a series of connected steps
+# describing a way to proceed. One might think that the "steps"
+# involved here were somehow the selected minimal digits, but
+# as it turn out the steps are the the descending levels of the
+# triangle, with each level a complete unit. As such the goal
+# is only to select the minimal value from each level, one per
+# level, and sum the collection.
+#
+# As the triangles themselves are delivered transformed into a
+# flat list-of-lists data structure, the levels themseleves are
+# already grouped into groups of elements for us. Although they
+# are constructed as an array-of-arrays, as that is the data
+# structure available to us, in practice the collection is
+# unordered: the "sum" operation is communitive, and does not
+# care about the order of the additions. Likewise the "minimum"
+# operates on a set, finding the smallest value, again without
+# regard to order.
+#
+# So hence my use of the word "lists" before, as the indexing
+# that de facto exists is inconsequential to either the
+# processing or the outcome. What we have is a list of
+# anonymous array units to be processed one-by-one until we are
+# dine, gathering from each the smallest element to an
+# accumulator that is reported.
+#
+# That's a lot of words to very specifically describe a much
+# simpler operation than I first expected.
+#
+# Although just printing the actual sum would be simpler, we'll
+# follow the example and gather the elements selected along the
+# way to produce our "path".
+#
+# ---
+#
+# You know, when I do these challenges, and especially when I
+# review the work of others, I make a concerted effort not to
+# ever use the word "easy". Why? Because it communicates very
+# little informatiion, and none of it useful. When I say
+# something is easy, I can only really mean that it is easy for
+# me. Other people, less familiar with the material, or the
+# required steps to a solution, might find the task
+# considerably more difficult. I don't know what they know, and
+# knowing the solution myself makes me blind to the state of
+# not knowing it.
+#
+# To them, knowing that I found the task easy does not help at
+# all. It's a distraction, or perhaps nothing at all at best,
+# and at worst sets up a judgemental ruling that their own
+# efforts, struggling to put the pieces together, are
+# substandard. I have no idea why I would ever want to do this.
+# Belittleing another person in no way makes me objectively
+# better. I remain exactly as able after as I was before.
+#
+# This isn't to be taken as a rejection of things actually
+# *being* easy mind you. I love that feeling of being overtaken
+# by exhuberance on a job well-done. Confidence is good, as is
+# pride in one's work, up to but not beyond the point of being
+# noticed by the gods. That other related word, hubris, is an
+# important idea to keep around, and I'm quite pleased a
+# clasicist hammered the nuances of the Greek term into my head
+# years ago. It has seved me well in life.
+#
+# So in the end I've decided that declaring things "easy"
+# amounts to nothing but a brag. An empty boast at that, as the
+# claim does not achieve anything of value. The only possible
+# effect it can have, it seems, is to cut someone else down, if
+# they are finding the task difficult.
+#
+# Perhaps I'm being a little hard on the term. It's still a
+# good word, after all.
+#
+# But I really can't stand braggarts.
+#
+#
+# © 2022 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+use warnings;
+use strict;
+use utf8;
+use feature ":5.26";
+use feature qw(signatures);
+no warnings 'experimental::signatures';
+
+use List::Util qw( sum min );
+
+## default triangle
+my $triangle = [ [1], [5,3], [2,3,4], [7,1,0,2], [6,4,5,2,8] ] ;
+
+my @out = map { min( $_->@* ) } $triangle->@*;
+
+say "minimum sum path: ", (join ' + ', @out), " => ", sum @out;
diff --git a/challenge-152/colin-crain/perl/ch-2.pl b/challenge-152/colin-crain/perl/ch-2.pl new file mode 100755 index 0000000000..cca54a2236 --- /dev/null +++ b/challenge-152/colin-crain/perl/ch-2.pl @@ -0,0 +1,170 @@ +#!/Users/colincrain/perl5/perlbrew/perls/perl-5.32.0/bin/perl
+#
+# whos-masking-the-mask.pl
+#
+# Rectangle Area
+# Submitted by: Mohammad S Anwar
+#
+# You are given coordinates bottom-left and top-right corner of
+# two rectangles in a 2D plane.
+#
+# Write a script to find the total area covered by the two rectangles.
+#
+# Example 1:
+# Input: Rectangle 1 => (-1,0), (2,2)
+# Rectangle 2 => (0,-1), (4,4)
+#
+# Output: 22
+#
+# Example 2:
+# Input: Rectangle 1 => (-3,-1), (1,3)
+# Rectangle 2 => (-1,-3), (2,2)
+#
+# Output: 25
+
+# analysis:
+#
+# I like it when the puzzle doesn't explain itself in too much
+# detail as to what's going on with it. Here we are given two
+# rectangles and asked to find the area covered by both. Ok,
+# sure. Deriving the area involves the application of a fairly
+# simple formula. Do that for each and there we are.
+#
+# But what if the rectangles overlap? Oh, right. That's the
+# puzzle. The part that isn't mentioned.
+#
+# If we simply sum the two areas, any overlap will be counted
+# twice. We can't have that. What to do?
+#
+# We need to find that overlap, that's what, and do somehing
+# about it. Stat.
+#
+# What we are looking for then is the *union* of the two areas.
+# For this we take the area covered only by one rectangle, the
+# area covered only by the other, the area covered by both, and
+# then we add all of that up. Or, you know, come to the same
+# answer some other way. Like if we could find just the
+# intersection area, we could subtract that from the sum of
+# each considered independantly. That would work too.
+#
+# So what is the overlap, then? We keep coming back to that
+# question. Let's answer it.
+#
+# In the first example, we have two z-axis ranges, one for each
+# rectangle...
+#
+# Oh right. Before we begin, we'll note that two points only
+# determine a rectangle if it is laid out orthogonally on the
+# plane. If we allow the shape to be rotated, which of course
+# is prefectly allowable in a 2-dimensional cartesion space,
+# then we lose the meaning of the "bottom-left" and "top-right"
+# corners as distinct properties. Although one (or two) points
+# will always be bottom-most, unless we are orthogonally
+# aligned that point will not also be left-most. The whole idea
+# gets schmurtled.
+#
+# So because we are only given the two points to define our
+# rectangle, we can safely infer that that the two rectangles
+# are orthogonally placed within the grid. This is good,
+# because calculating teh area in arbitrarily-rotated
+# rectangles is considerably harder to do. Not impossible, but
+# much more complicated.
+#
+# That settled, we have two x-axis ranges, one for each
+# rectangle. Any overlapped area will be contained within the
+# overlap of these ranges, although the area may still be 0 if
+# there is no \y-axis overlap as well.
+#
+# Which leads us to th e\t-axis next. It is the combination of
+# these four overlaped ranges that in turn defines the left and
+# right, top and bottom extremities of the intersected area.
+#
+# So we get that shape, subtract it from the sum of the two
+# rectangles, ad we have our answer.
+#
+# method:
+#
+# We're going to go with the subtractive solution outlined
+# above. Let's call the area of one rectangle A, the other B.
+# Then we're looking for the union of the two areas:
+#
+# A ∪ B = A + B - ( A ∩ B )
+#
+
+#
+# © 2022 colin crain
+## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
+
+
+
+use warnings;
+use strict;
+use utf8;
+use feature ":5.26";
+use feature qw(signatures);
+no warnings 'experimental::signatures';
+
+
+
+## a rectangle is defined as two point tuples [$p1,$p2] for the
+## bottom-left and upper-right vertices
+## main functions return returns units²
+
+sub area ( $rect ) {
+ my $x = abs( $rect->[0][0] - $rect->[1][0] );
+ my $y = abs( $rect->[0][1] - $rect->[1][1] );
+ return $x * $y;
+}
+
+sub intersect ( $rect1, $rect2 ) {
+ _overlap( [ map { $_->[0] } $rect1->@* ], ## rect 1 x-axis
+ [ map { $_->[0] } $rect2->@* ] ) ## rect 2 x-axis
+ *
+ _overlap( [ map { $_->[1] } $rect1->@* ], ## rect 1 y-axis
+ [ map { $_->[1] } $rect2->@* ] ); ## rect 2 y-axis
+}
+
+sub union ( $rect1, $rect2 ) {
+ area ($rect1)
+ + area ($rect2)
+ - intersect ($rect1, $rect2) ;
+}
+
+sub _overlap ( $r1, $r2 ) {
+## ranges are ordered 2-element tuples [start,end] : end > start
+## no order is assumed between the two ranges $r1 and $r2
+## returns absolute value of overlapping range
+## there are five cases total:
+## 1. no overlap
+## 2. A overlaps start of B
+## 3. B overlaps start of A
+## 4. A completely encloses B
+## 5. B completely encloses A
+
+ ## sort the ranges by start point (merge cases 2+3 and 4+5)
+ $r1->[0] > $r2->[0] and ( $r1, $r2 ) = ( $r2, $r1 );
+
+ $r2->[0] > $r1->[1]
+ ? 0 ## no overlap (1)
+ : abs( $r2->[0]
+ - ( $r2->[1] > $r1->[1]
+ ? $r1->[1] ## intersection (2+3)
+ : $r2->[1] ) ) ## A encloses B (4+5)
+}
+
+
+
+use Test::More;
+
+is union( [[-1,0], [2,2]], [[0,-1], [4,4]] ), 22, 'ex-1';
+is union( [[-3,-1], [1,3]], [[-1,-3], [2,2]] ), 25, 'ex-2';
+is union( [[-2,-2], [0,0]], [[0,0], [2,2]] ), 8, 'figure-8, no overlap';
+is union( [[0,0], [2,2]], [[0,0], [2,2]] ), 4, 'superimposed, all overlap';
+
+is union( [[0,0], [2,4]], [[0,0], [3,4]] ), 12, 'A in B, left-aligned';
+is union( [[0,0], [3,4]], [[0,0], [2,4]] ), 12, 'B in A, left-aligned';
+is union( [[1,0], [3,4]], [[0,0], [3,4]] ), 12, 'A in B, right-aligned';
+is union( [[0,0], [3,4]], [[1,0], [3,4]] ), 12, 'B in A, right-aligned';
+
+
+done_testing();
diff --git a/challenge-152/colin-crain/raku/ch-1.raku b/challenge-152/colin-crain/raku/ch-1.raku new file mode 100755 index 0000000000..7d0dbeb49e --- /dev/null +++ b/challenge-152/colin-crain/raku/ch-1.raku @@ -0,0 +1,22 @@ +#!/usr/bin/env perl6 +# +# +# the-path-in-the-pyramid.raku +# +# +# +# © 2022 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + +unit sub MAIN () ; + +my @triangle = [1], [5,3], [2,3,4], [7,1,0,2], [6,4,5,2,8]; + +my @out = @triangle.map( { $_.min }); + +say "minimum sum path: {@out.join(' + ')} => {@out.sum}"; + + + diff --git a/challenge-152/colin-crain/raku/ch-2.raku b/challenge-152/colin-crain/raku/ch-2.raku new file mode 100755 index 0000000000..00f9c22b65 --- /dev/null +++ b/challenge-152/colin-crain/raku/ch-2.raku @@ -0,0 +1,68 @@ +#!/usr/bin/env perl6 +# +# +# whos-masking-the-mask.raku +# +# +# +# © 2022 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + +unit sub MAIN () ; + +sub area ( @rect ) { + + ((@rect[0][0] - @rect[1][0]) * (@rect[0][1] - @rect[1][1])).abs +} + +sub intersect ( @rect1, @rect2 ) { + + _overlap( @rect1.map(*[0]), ## rect 1 x-axis + @rect2.map(*[0]) ) ## rect 2 x-axis + + * + + _overlap( @rect1.map(*[1]), ## rect 1 y-axis + @rect2.map(*[1]) ); ## rect 2 y-axis +} + +sub union ( @rect1, @rect2 ) { + + area(@rect1) + + area(@rect2) + - intersect(@rect1, @rect2) ; +} + +sub _overlap ( $r1 is copy, $r2 is copy ) { + + ## sort the ranges by start point (merge cases 2+3 and 4+5) + $r1[0] > $r2[0] and ($r1, $r2) = ($r2, $r1) ; + + $r2[0] > $r1[1] + ?? 0 ## no overlap (1) + !! abs( $r2[0] + - ( $r2[1] > $r1[1] + ?? $r1[1] ## intersection (2+3) + !! $r2[1] ) ) ## A encloses B (4+5) +} + + +use Test; + +is union( ((-1,0),(2,2) ), ((0,-1),(4,4)) ) , 22, 'ex-1'; +is union( ((-3,-1), (1,3)), ((-1,-3), (2,2)) ) , 25, 'ex-2'; +is union( ((-2,-2), (0,0)), ((1,1), (3,3)) ) , 8, 'independant, no overlap'; +is union( ((-2,-2), (0,0)), ((0,0), (2,2)) ) , 8, 'figure-8, single point overlap'; +is union( ((0,-2), (2,0)), ((0,0), (2,2)) ) , 8, 'stacked, single line overlap'; +is union( ((0,-2), (2,1)), ((0,-1), (2,2)) ) , 8, 'stacked, overlapped'; +is union( ((0,0), (2,2)), ((0,0), (2,2)) ) , 4, 'superimposed, all overlap'; + + +is union( ((0,0), (2,4)), ((0,0), (3,4)) ), 12, 'A in B, left-aligned'; +is union( ((0,0), (3,4)), ((0,0), (2,4)) ), 12, 'B in A, left-aligned'; +is union( ((1,0), (3,4)), ((0,0), (3,4)) ), 12, 'A in B, right-aligned'; +is union( ((0,0), (3,4)), ((1,0), (3,4)) ), 12, 'B in A, right-aligned'; + + diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 4676e7f5ca..0a9e7c9b37 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,33 +1,36 @@ { + "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" : { + "format" : "{point.y}", + "enabled" : 1 + } + } + }, "title" : { "text" : "The Weekly Challenge - 152" }, "legend" : { "enabled" : 0 }, - "subtitle" : { - "text" : "[Champions: 26] Last updated at 2022-02-20 23:25:39 GMT" - }, - "xAxis" : { - "type" : "category" - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, "series" : [ { "name" : "The Weekly Challenge - 152", "data" : [ { - "drilldown" : "Abigail", "y" : 2, + "drilldown" : "Abigail", "name" : "Abigail" }, { - "drilldown" : "Alexander Pankoff", "name" : "Alexander Pankoff", + "drilldown" : "Alexander Pankoff", "y" : 4 }, { @@ -37,83 +40,83 @@ }, { "name" : "Athanasius", - "y" : 4, - "drilldown" : "Athanasius" + "drilldown" : "Athanasius", + "y" : 4 }, { + "y" : 1, "drilldown" : "Cheok-Yin Fung", - "name" : "Cheok-Yin Fung", - "y" : 1 + "name" : "Cheok-Yin Fung" }, { - "y" : 2, "name" : "Colin Crain", - "drilldown" : "Colin Crain" + "drilldown" : "Colin Crain", + "y" : 6 }, { "name" : "Dave Jacoby", - "y" : 4, - "drilldown" : "Dave Jacoby" + "drilldown" : "Dave Jacoby", + "y" : 4 }, { "name" : "Duncan C. White", - "y" : 2, - "drilldown" : "Duncan C. White" + "drilldown" : "Duncan C. White", + "y" : 2 }, { "y" : 2, - "name" : "E. Choroba", - "drilldown" : "E. Choroba" + "drilldown" : "E. Choroba", + "name" : "E. Choroba" }, { - "drilldown" : "Flavio Poletti", "y" : 6, - "name" : "Flavio Poletti" + "name" : "Flavio Poletti", + "drilldown" : "Flavio Poletti" }, { - "drilldown" : "James Smith", + "y" : 3, "name" : "James Smith", - "y" : 3 + "drilldown" : "James Smith" }, { - "drilldown" : "Jan Krnavek", + "y" : 1, "name" : "Jan Krnavek", - "y" : 1 + "drilldown" : "Jan Krnavek" }, { - "drilldown" : "Jorg Sommrey", + "y" : 2, "name" : "Jorg Sommrey", - "y" : 2 + "drilldown" : "Jorg Sommrey" }, { + "drilldown" : "Laurent Rosenfeld", "name" : "Laurent Rosenfeld", - "y" : 5, - "drilldown" : "Laurent Rosenfeld" + "y" : 5 }, { - "drilldown" : "Lubos Kolouch", + "y" : 2, "name" : "Lubos Kolouch", - "y" : 2 + "drilldown" : "Lubos Kolouch" }, { "y" : 4, - "name" : "Luca Ferrari", - "drilldown" : "Luca Ferrari" + "drilldown" : "Luca Ferrari", + "name" : "Luca Ferrari" }, { - "drilldown" : "Mark Anderson", + "y" : 2, "name" : "Mark Anderson", - "y" : 2 + "drilldown" : "Mark Anderson" }, { "drilldown" : "Mohammad S Anwar", - "y" : 1, - "name" : "Mohammad S Anwar" + "name" : "Mohammad S Anwar", + "y" : 1 }, { - "drilldown" : "Peter Campbell Smith", "y" : 3, - "name" : "Peter Campbell Smith" + "name" : "Peter Campbell Smith", + "drilldown" : "Peter Campbell Smith" }, { "y" : 2, @@ -121,14 +124,14 @@ "drilldown" : "PokGoPun" }, { - "drilldown" : "Robert DiCicco", + "y" : 2, "name" : "Robert DiCicco", - "y" : 2 + "drilldown" : "Robert DiCicco" }, { - "y" : 1, "name" : "Robert Ransbottom", - "drilldown" : "Robert Ransbottom" + "drilldown" : "Robert Ransbottom", + "y" : 1 }, { "drilldown" : "Roger Bell_West", @@ -136,41 +139,38 @@ "y" : 5 }, { - "drilldown" : "Simon Green", "name" : "Simon Green", + "drilldown" : "Simon Green", "y" : 3 }, { "y" : 4, - "name" : "Ulrich Rieke", - "drilldown" : "Ulrich Rieke" + "drilldown" : "Ulrich Rieke", + "name" : "Ulrich Rieke" }, { - "y" : 3, + "drilldown" : "W. Luis Mochan", "name" : "W. Luis Mochan", - "drilldown" : "W. Luis Mochan" + "y" : 3 } ], "colorByPoint" : 1 } ], - "plotOptions" : { - "series" : { - "borderWidth" : 0, - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - } - } - }, - "tooltip" : { - "followPointer" : 1, - "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/>" + "subtitle" : { + "text" : "[Champions: 26] Last updated at 2022-02-21 04:19:01 GMT" }, "chart" : { "type" : "column" }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "xAxis" : { + "type" : "category" + }, "drilldown" : { "series" : [ { @@ -198,8 +198,6 @@ "id" : "Alexander Pankoff" }, { - "id" : "Arne Sommer", - "name" : "Arne Sommer", "data" : [ [ "Raku", @@ -209,7 +207,9 @@ "Blog", 1 ] - ] + ], + "name" : "Arne Sommer", + "id" : "Arne Sommer" }, { "data" : [ @@ -226,27 +226,35 @@ "id" : "Athanasius" }, { - "id" : "Cheok-Yin Fung", + "name" : "Cheok-Yin Fung", "data" : [ [ "Perl", 1 ] ], - "name" : "Cheok-Yin Fung" + "id" : "Cheok-Yin Fung" }, { + "id" : "Colin Crain", "data" : [ [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ "Blog", 2 ] ], - "name" : "Colin Crain", - "id" : "Colin Crain" + "name" : "Colin Crain" }, { - "id" : "Dave Jacoby", + "name" : "Dave Jacoby", "data" : [ [ "Perl", @@ -257,31 +265,29 @@ 2 ] ], - "name" : "Dave Jacoby" + "id" : "Dave Jacoby" }, { + "id" : "Duncan C. White", + "name" : "Duncan C. White", "data" : [ [ "Perl", 2 ] - ], - "name" : "Duncan C. White", - "id" : "Duncan C. White" + ] }, { - "id" : "E. Choroba", + "name" : "E. Choroba", "data" : [ [ "Perl", 2 ] ], - "name" : "E. Choroba" + "id" : "E. Choroba" }, { - "id" : "Flavio Poletti", - "name" : "Flavio Poletti", "data" : [ [ "Perl", @@ -295,10 +301,12 @@ "Blog", 2 ] - ] + ], + "name" : "Flavio Poletti", + "id" : "Flavio Poletti" }, { - "name" : "James Smith", + "id" : "James Smith", "data" : [ [ "Perl", @@ -309,31 +317,29 @@ 1 ] ], - "id" : "James Smith" + "name" : "James Smith" }, { - "id" : "Jan Krnavek", "data" : [ [ "Raku", 1 ] ], - "name" : "Jan Krnavek" + "name" : "Jan Krnavek", + "id" : "Jan Krnavek" }, { "id" : "Jorg Sommrey", - "name" : "Jorg Sommrey", "data" : [ [ "Perl", 2 ] - ] + ], + "name" : "Jorg Sommrey" }, { - "id" : "Laurent Rosenfeld", - "name" : "Laurent Rosenfeld", "data" : [ [ "Perl", @@ -347,19 +353,23 @@ "Blog", 1 ] - ] + ], + "name" : "Laurent Rosenfeld", + "id" : "Laurent Rosenfeld" }, { + "id" : "Lubos Kolouch", + "name" : "Lubos Kolouch", "data" : [ [ "Perl", 2 ] - ], - "name" : "Lubos Kolouch", - "id" : "Lubos Kolouch" + ] }, { + "id" : "Luca Ferrari", + "name" : "Luca Ferrari", "data" : [ [ "Raku", @@ -369,29 +379,27 @@ "Blog", 2 ] - ], - "name" : "Luca Ferrari", - "id" : "Luca Ferrari" + ] }, { - "id" : "Mark Anderson", "name" : "Mark Anderson", "data" : [ [ "Raku", 2 ] - ] + ], + "id" : "Mark Anderson" }, { "id" : "Mohammad S Anwar", + "name" : "Mohammad S Anwar", "data" : [ [ "Perl", 1 ] - ], - "name" : "Mohammad S Anwar" + ] }, { "name" : "Peter Campbell Smith", @@ -408,36 +416,37 @@ "id" : "Peter Campbell Smith" }, { + "id" : "PokGoPun", "data" : [ [ "Perl", 2 ] ], - "name" : "PokGoPun", - "id" : "PokGoPun" + "name" : "PokGoPun" }, { - "id" : "Robert DiCicco", - "name" : "Robert DiCicco", "data" : [ [ "Perl", 2 ] - ] + ], + "name" : "Robert DiCicco", + "id" : "Robert DiCicco" }, { - "id" : "Robert Ransbottom", "data" : [ [ "Raku", 1 ] ], - "name" : "Robert Ransbotto |
