diff options
27 files changed, 2448 insertions, 1847 deletions
diff --git a/challenge-132/abigail/blog2.txt b/challenge-132/abigail/blog2.txt new file mode 100644 index 0000000000..9593e5f199 --- /dev/null +++ b/challenge-132/abigail/blog2.txt @@ -0,0 +1 @@ +https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-132-2.html diff --git a/challenge-132/adam-russell/perl/ch-1.pl b/challenge-132/adam-russell/perl/ch-1.pl new file mode 100644 index 0000000000..5cf04756a2 --- /dev/null +++ b/challenge-132/adam-russell/perl/ch-1.pl @@ -0,0 +1,42 @@ +use strict; +use warnings; +## +# You are given a date (yyyy/mm/dd). +# Assuming, the given date is your date of birth. +# Write a script to find the mirror dates of the given date. +## +use Time::Piece; +use Time::Seconds; + +sub mirror_dates{ + my($date_string, $start_date_string) = @_; + my $date = Time::Piece->strptime($date_string, q[%Y/%m/%e]); + my $today; + if($start_date_string){ + $today = Time::Piece->strptime($start_date_string, q[%Y/%m/%e]); + } + else{ + $today = localtime; + } + my $age = $today - $date; + my $past = $date - $age; + my $future = $today + $age; + return $past->strftime(q[%Y/%m/%d]), $future->strftime(q[%Y/%m/%d]); +} + +MAIN:{ + my($past, $future); + ($past, $future) = mirror_dates("2021/09/18", "2021/09/22"); + print "$past, $future\n"; + ($past, $future) = mirror_dates("1975/10/10", "2021/09/22"); + print "$past, $future\n"; + ($past, $future) = mirror_dates("1967/02/14", "2021/09/22"); + print "$past, $future\n"; + + ($past, $future) = mirror_dates("2021/09/18"); + print "$past, $future\n"; + ($past, $future) = mirror_dates("1975/10/10"); + print "$past, $future\n"; + ($past, $future) = mirror_dates("1967/02/14"); + print "$past, $future\n"; +}
\ No newline at end of file diff --git a/challenge-132/arne-sommer/blog.txt b/challenge-132/arne-sommer/blog.txt new file mode 100644 index 0000000000..91ef16738c --- /dev/null +++ b/challenge-132/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/mirrored-hash.html diff --git a/challenge-132/arne-sommer/raku/ch-1.raku b/challenge-132/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..1867da0bb3 --- /dev/null +++ b/challenge-132/arne-sommer/raku/ch-1.raku @@ -0,0 +1,26 @@ +#! /usr/bin/env raku + +subset SlashDate where * ~~ /^\d\d\d\d\/\d\d\/\d\d$/; + +my $fmt = { sprintf "%04d/%02d/%02d", .year, .month, .day }; + +unit sub MAIN (SlashDate $date = "2021/09/18", + SlashDate :$today = Date.new(DateTime.now, formatter => $fmt).Str, + :v($verbose)); + +my $date-iso = $date.subst("/", "-", :g); + +my $earlier = Date.new($date-iso, formatter => $fmt); +my $now = Date.new($today.subst("/", "-", :g), formatter => $fmt); + +die "The date ($earlier) should be earlier than today ($now)" unless $earlier < $now; + +my $diff = $now - $earlier; + +say ": Today: $now" if $verbose; +say ": Difference: $diff days" if $verbose; + +my $first = $earlier.earlier(day => $diff); +my $last = $now.later( day => $diff); + +say "$first, $last"; diff --git a/challenge-132/arne-sommer/raku/ch-2.raku b/challenge-132/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..6f0e2607d9 --- /dev/null +++ b/challenge-132/arne-sommer/raku/ch-2.raku @@ -0,0 +1,28 @@ +#! /usr/bin/env raku + +use lib "lib"; +use HashJoin; + +unit sub MAIN (:v(:$verbose)); + +my @player_ages = ( + [20, "Alex" ], + [28, "Joe" ], + [38, "Mike" ], + [18, "Alex" ], + [25, "David" ], + [18, "Simon" ], +); + +my @player_names = ( + ["Alex", "Stewart"], + ["Joe", "Root" ], + ["Mike", "Gatting"], + ["Joe", "Blog" ], + ["Alex", "Jones" ], + ["Simon","Duane" ], +); + +my @joined = HashJoin::merge(@player_ages, 1, @player_names, 0, :$verbose); + +HashJoin::print-it(@joined); diff --git a/challenge-132/arne-sommer/raku/hash-join b/challenge-132/arne-sommer/raku/hash-join new file mode 100755 index 0000000000..493a6182eb --- /dev/null +++ b/challenge-132/arne-sommer/raku/hash-join @@ -0,0 +1,77 @@ +#! /usr/bin/env raku + +unit sub MAIN (:v(:$verbose)); + +my @player_ages = ( + [20, "Alex" ], + [28, "Joe" ], + [38, "Mike" ], + [18, "Alex" ], + [25, "David" ], + [18, "Simon" ], +); + +my @player_names = ( + ["Alex", "Stewart"], + ["Joe", "Root" ], + ["Mike", "Gatting"], + ["Joe", "Blog" ], + ["Alex", "Jones" ], + ["Simon","Duane" ], +); + +hash-join(@player_ages, 1, @player_names, 0); + +sub hash-join (@table1 is copy, $index1 is copy, @table2 is copy, $index2 is copy) +{ + if @table1.elems > @table2.elems + { + (@table1, @table2) = (@table2, @table1); + ($index1, $index2) = ($index2, $index1); + } + + my %table1; + + for @table1 -> $row + { + my @data = @$row; + my $id = @data.splice($index1, 1); + + say ": Table 1 Row (add): $id -> { @data.join(", ") }" if $verbose; + %table1{$id}.push: @data; + } + + my %result; + + for @table2 -> $row + { + my @data = @$row; + my $id = @data.splice($index2, 1); + if $verbose + { + say ": Table 1 Row (scan): $id -> { @(%table1{$id}).join(", ") }"; + say ": Table 2 Row (scan): $id -> { @data.join(", ") }"; + } + + for @(%table1{$id}) -> $row + { + %result{$id}.push: (@$row, @data).flat; + say ": Result Table Row: $id -> { @$row.join(", ") } + { @data.join(", ") }" if $verbose; + } + } + + for %result.keys.sort -> $id + { + my @rows = @(%result{$id}); + + for @rows -> $row + { + say nicify(|($id, @$row)); + } + } +} + +sub nicify (*@data) +{ + return @data.map({ $_ ~~ Numeric ?? $_ !! '"' ~ $_ ~ '"' }).join(", "); +} diff --git a/challenge-132/arne-sommer/raku/hash-join-module b/challenge-132/arne-sommer/raku/hash-join-module new file mode 100755 index 0000000000..c0330df3a9 --- /dev/null +++ b/challenge-132/arne-sommer/raku/hash-join-module @@ -0,0 +1,26 @@ +#! /usr/bin/env raku + +use lib "lib"; +use HashJoin; + +unit sub MAIN (:v(:$verbose)); + +my @player_ages = ( + [20, "Alex" ], + [28, "Joe" ], + [38, "Mike" ], + [18, "Alex" ], + [25, "David" ], + [18, "Simon" ], +); + +my @player_names = ( + ["Alex", "Stewart"], + ["Joe", "Root" ], + ["Mike", "Gatting"], + ["Joe", "Blog" ], + ["Alex", "Jones" ], + ["Simon","Duane" ], +); + +HashJoin::hash-join-sorted(@player_ages, 1, @player_names, 0, :$verbose); diff --git a/challenge-132/arne-sommer/raku/hash-join-module2 b/challenge-132/arne-sommer/raku/hash-join-module2 new file mode 100755 index 0000000000..6f0e2607d9 --- /dev/null +++ b/challenge-132/arne-sommer/raku/hash-join-module2 @@ -0,0 +1,28 @@ +#! /usr/bin/env raku + +use lib "lib"; +use HashJoin; + +unit sub MAIN (:v(:$verbose)); + +my @player_ages = ( + [20, "Alex" ], + [28, "Joe" ], + [38, "Mike" ], + [18, "Alex" ], + [25, "David" ], + [18, "Simon" ], +); + +my @player_names = ( + ["Alex", "Stewart"], + ["Joe", "Root" ], + ["Mike", "Gatting"], + ["Joe", "Blog" ], + ["Alex", "Jones" ], + ["Simon","Duane" ], +); + +my @joined = HashJoin::merge(@player_ages, 1, @player_names, 0, :$verbose); + +HashJoin::print-it(@joined); diff --git a/challenge-132/arne-sommer/raku/hash-join-module3 b/challenge-132/arne-sommer/raku/hash-join-module3 new file mode 100755 index 0000000000..14293dda61 --- /dev/null +++ b/challenge-132/arne-sommer/raku/hash-join-module3 @@ -0,0 +1,39 @@ +#! /usr/bin/env raku + +use lib "lib"; +use HashJoin; + +unit sub MAIN (:v(:$verbose)); + +my @player_ages = ( + [20, "Alex", "May", 29 ], + [28, "Joe", "August", 2 ], + [38, "Mike", "June", 12 ], + [18, "Alex", "January", 29 ], + [25, "David", "March", 14 ], + [18, "Simon", "June", 10 ], +); + +my @player_names = ( + ["Alex", "Stewart", "Oslo" ], + ["Joe", "Root", "Berlin" ], + ["Mike", "Gatting", "London" ], + ["Joe", "Blog", "Bern" ], + ["Alex", "Jones", "Zürich" ], + ["Simon","Duane", "Oxford" ], +); + +my @countries = ( + ["Norway", "Oslo" ], + ["Germany", "Berlin" ], + ["England", "London" ], + ["Switzerland", "Bern" ], + ["Switzerland", "Zürich" ], + ["England", "Oxford" ], +); + +my @joined = HashJoin::merge(@player_ages, 1, @player_names, 0, :$verbose); + +my @joined2 = HashJoin::merge(@joined, 5, @countries, 1); + +HashJoin::print-it(@joined2); diff --git a/challenge-132/arne-sommer/raku/hash-join-module4 b/challenge-132/arne-sommer/raku/hash-join-module4 new file mode 100755 index 0000000000..c13dba2d33 --- /dev/null +++ b/challenge-132/arne-sommer/raku/hash-join-module4 @@ -0,0 +1,40 @@ +#! /usr/bin/env raku + +use lib "lib"; +use HashJoin; + +unit sub MAIN (:v(:$verbose)); + +my @player_ages = ( + [20, "Alex", "May", 29 ], + [28, "Joe", "August", 2 ], + [38, "Mike", "June", 12 ], + [18, "Alex", "January", 29 ], + [25, "David", "March", 14 ], + [18, "Simon", "June", 10 ], +); + +my @player_names = ( + ["Alex", "Stewart", "Oslo" ], + ["Joe", "Root", "Berlin" ], + ["Mike", "Gatting", "London" ], + ["Joe", "Blog", "Bern" ], + ["Alex", "Jones", "Zürich" ], + ["Simon","Duane", "Birmingham" ], +); + +my @countries = ( + ["Norway", "Oslo" ], + ["Germany", "Berlin" ], + ["England", "London" ], + ["Switzerland", "Bern" ], + ["Switzerland", "Zürich" ], + ["England", "Birmingham" ], + ["USA", "Birmingham" ], +); + +my @joined = HashJoin::merge(@player_ages, 1, @player_names, 0, :$verbose); + +my @joined2 = HashJoin::merge(@joined, 5, @countries, 1); + +HashJoin::print-it(@joined2); diff --git a/challenge-132/arne-sommer/raku/hash-join-sorted b/challenge-132/arne-sommer/raku/hash-join-sorted new file mode 100755 index 0000000000..b94bfa0555 --- /dev/null +++ b/challenge-132/arne-sommer/raku/hash-join-sorted @@ -0,0 +1,72 @@ +#! /usr/bin/env raku + +unit sub MAIN (:v(:$verbose)); + +my @player_ages = ( + [20, "Alex" ], + [28, "Joe" ], + [38, "Mike" ], + [18, "Alex" ], + [25, "David" ], + [18, "Simon" ], +); + +my @player_names = ( + ["Alex", "Stewart"], + ["Joe", "Root" ], + ["Mike", "Gatting"], + ["Joe", "Blog" ], + ["Alex", "Jones" ], + ["Simon","Duane" ], +); + +hash-join-sorted(@player_ages, 1, @player_names, 0); + +sub hash-join-sorted (@table1, $index1, @table2, $index2) +{ + my %table1; + + for @table1 -> $row + { + my @data = @$row; + my $id = @data[$index1]; + + say ": Table 1 Row (add): $id -> { @data.join(", ") }" if $verbose; + %table1{$id}.push: @data; + } + + my %result; + + for @table2 -> $row + { + my @data = @$row; + my $id = @data.splice($index2, 1); + + if $verbose + { + say ": Table 1 Row (scan): $id -> { @(%table1{$id}).join(", ") }"; + say ": Table 2 Row (scan): $id -> { @data.join(", ") }"; + } + + for @(%table1{$id}) -> $row + { + %result{$id}.push: (@$row, @data).flat; + say ": Result Table Row: $id -> { @$row.join(", ") } + { @data.join(", ") }" if $verbose; + } + } + + for %result.keys.sort -> $id + { + my @rows = @(%result{$id}); + + for @rows -> $row + { + say nicify(@$row); + } + } +} + +sub nicify (*@data) +{ + return @data.map({ $_ ~~ Numeric ?? $_ !! '"' ~ $_ ~ '"' }).join(", "); +} diff --git a/challenge-132/arne-sommer/raku/lib/HashJoin.rakumod b/challenge-132/arne-sommer/raku/lib/HashJoin.rakumod new file mode 100644 index 0000000000..05705b8f5a --- /dev/null +++ b/challenge-132/arne-sommer/raku/lib/HashJoin.rakumod @@ -0,0 +1,146 @@ +unit module HashJoin; + +our sub merge (@table1, $index1, @table2, $index2, :$verbose) +{ + my %table1; + my @ids; + my %ids; + my %result; + + for @table1 -> $row1 + { + my @data1 = @$row1; + my $id1 = @data1[$index1]; + @ids.push: $id1 unless any(@ids) eq $id1; + + say ": Table 1 Row (scan): $id1 -> { @data1.join(", ") }" if $verbose; + + for @table2 -> $row2 + { + my @data2 = @$row2; + my $id2 = @data2.splice($index2, 1); + next unless $id1 eq $id2; + + %ids{$id2} = True; + %result{$id1}.push: (@data1, @data2).flat; + + say ": Result Table Row: $id1 -> { @data1.join(", ") } + { @data2.join(", ") }" if $verbose; + } + } + + my @result; + + for @ids -> $id + { + next unless %ids{$id}; + @result.append: @(%result{$id}); + } + + return @result; +} + +our sub hash-join-sorted (@table1, $index1, @table2, $index2, :$verbose) +{ + my %table1; + + for @table1 -> $row + { + my @data = @$row; + my $id = @data[$index1]; + + say ": Table 1 Row (add): $id -> { @data.join(", ") }" if $verbose; + %table1{$id}.push: @data; + } + + my %result; + + for @table2 -> $row + { + my @data = @$row; + my $id = @data.splice($index2, 1); + + if $verbose + { + say ": Table 1 Row (scan): $id -> { @(%table1{$id}).join(", ") }"; + say ": Table 2 Row (scan): $id -> { @data.join(", ") }"; + } + + for @(%table1{$id}) -> $row + { + %result{$id}.push: (@$row, @data).flat; + say ": Result Table Row: $id -> { @$row.join(", ") } + { @data.join(", ") }" if $verbose; + } + } + + for %result.keys.sort -> $id + { + my @rows = @(%result{$id}); + + for @rows -> $row + { + say nicify(@$row); + } + } +} + +our sub hash-join (@table1 is copy, $index1 is copy, @table2 is copy, $index2 is copy, :$verbose) +{ + if @table1.elems > @table2.elems + { + (@table1, @table2) = (@table2, @table1); + ($index1, $index2) = ($index2, $index1); + } + + my %table1; + + for @table1 -> $row + { + my @data = @$row; + my $id = @data.splice($index1, 1); + + say ": Table 1 Row (add): $id -> { @data.join(", ") }" if $verbose; + %table1{$id}.push: @data; + } + + my %result; + + for @table2 -> $row + { + my @data = @$row; + my $id = @data.splice($index2, 1); + if $verbose + { + say ": Table 1 Row (scan): $id -> { @(%table1{$id}).join(", ") }"; + say ": Table 2 Row (scan): $id -> { @data.join(", ") }"; + } + + for @(%table1{$id}) -> $row + { + %result{$id}.push: (@$row, @data).flat; + say ": Result Table Row: $id -> { @$row.join(", ") } + { @data.join(", ") }" if $verbose; + } + } + + for %result.keys.sort -> $id + { + my @rows = @(%result{$id}); + + for @rows -> $row + { + say nicify(|($id, @$row)); + } + } +} + +sub nicify (*@data) +{ + return @data.map({ $_ ~~ Numeric ?? $_ !! '"' ~ $_ ~ '"' }).join(", "); +} + +our sub print-it(*@data) +{ + for @data -> $row + { + say nicify(@$row); + } +} diff --git a/challenge-132/arne-sommer/raku/mirror-dates b/challenge-132/arne-sommer/raku/mirror-dates new file mode 100755 index 0000000000..1867da0bb3 --- /dev/null +++ b/challenge-132/arne-sommer/raku/mirror-dates @@ -0,0 +1,26 @@ +#! /usr/bin/env raku + +subset SlashDate where * ~~ /^\d\d\d\d\/\d\d\/\d\d$/; + +my $fmt = { sprintf "%04d/%02d/%02d", .year, .month, .day }; + +unit sub MAIN (SlashDate $date = "2021/09/18", + SlashDate :$today = Date.new(DateTime.now, formatter => $fmt).Str, + :v($verbose)); + +my $date-iso = $date.subst("/", "-", :g); + +my $earlier = Date.new($date-iso, formatter => $fmt); +my $now = Date.new($today.subst("/", "-", :g), formatter => $fmt); + +die "The date ($earlier) should be earlier than today ($now)" unless $earlier < $now; + +my $diff = $now - $earlier; + +say ": Today: $now" if $verbose; +say ": Difference: $diff days" if $verbose; + +my $first = $earlier.earlier(day => $diff); +my $last = $now.later( day => $diff); + +say "$first, $last"; diff --git a/stats/pwc-current.json b/stats/pwc-current.json index f54a36508e..4e714dc264 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,78 +1,67 @@ { - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, - "title" : { - "text" : "The Weekly Challenge - 132" - }, - "plotOptions" : { - "series" : { - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - }, - "borderWidth" : 0 - } - }, - "tooltip" : { - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", - "followPointer" : 1 - }, - "subtitle" : { - "text" : "[Champions: 22] Last updated at 2021-10-03 14:39:09 GMT" - }, "chart" : { "type" : "column" }, - "xAxis" : { - "type" : "category" + "title" : { + "text" : "The Weekly Challenge - 132" }, "series" : [ { - "colorByPoint" : 1, "data" : [ { - "name" : "Athanasius", - "drilldown" : "Athanasius", - "y" : 2 + "drilldown" : "Abigail", + "y" : 2, + "name" : "Abigail" }, { + "y" : 1, + "name" : "Adam Russell", + "drilldown" : "Adam Russell" + }, + { + "y" : 3, + "name" : "Arne Sommer", + "drilldown" : "Arne Sommer" + }, + { + "name" : "Athanasius", "y" : 2, + "drilldown" : "Athanasius" + }, + { "name" : "Ben Davies", + "y" : 2, "drilldown" : "Ben Davies" }, { - "name" : "Cheok-Yin Fung", "drilldown" : "Cheok-Yin Fung", - "y" : 1 + "y" : 1, + "name" : "Cheok-Yin Fung" }, { "drilldown" : "Dave Jacoby", - "name" : "Dave Jacoby", - "y" : 3 + "y" : 3, + "name" : "Dave Jacoby" }, { "name" : "E. Choroba", - "drilldown" : "E. Choroba", - "y" : 2 + "y" : 2, + "drilldown" : "E. Choroba" }, { - "drilldown" : "Flavio Poletti", "name" : "Flavio Poletti", - "y" : 6 + "y" : 6, + "drilldown" : "Flavio Poletti" }, { "name" : "James Raspass", - "drilldown" : "James Raspass", - "y" : 1 + "y" : 1, + "drilldown" : "James Raspass" }, { - "name" : "James Smith", "drilldown" : "James Smith", - "y" : 3 + "y" : 3, + "name" : "James Smith" }, { "drilldown" : "Jan Krnavek", @@ -80,18 +69,18 @@ "y" : 1 }, { - "y" : 2, "drilldown" : "Jorg Sommrey", + "y" : 2, "name" : "Jorg Sommrey" }, { - "y" : 5, "drilldown" : "Laurent Rosenfeld", + "y" : 5, "name" : "Laurent Rosenfeld" }, { - "y" : 1, "drilldown" : "Lubos Kolouch", + "y" : 1, "name" : "Lubos Kolouch" }, { @@ -100,8 +89,8 @@ "drilldown" : "Luca Ferrari" }, { - "name" : "Mark Anderson", "drilldown" : "Mark Anderson", + "name" : "Mark Anderson", "y" : 2 }, { @@ -110,66 +99,101 @@ "y" : 2 }, { + "drilldown" : "Niels van Dijke", "y" : 2, - "name" : "Niels van Dijke", - "drilldown" : "Niels van Dijke" + "name" : "Niels van Dijke" }, { - "drilldown" : "Olivier Delouya", "name" : "Olivier Delouya", - "y" : 2 + "y" : 2, + "drilldown" : "Olivier Delouya" }, { "name" : "Roger Bell_West", - "drilldown" : "Roger Bell_West", - "y" : 5 + "y" : 5, + "drilldown" : "Roger Bell_West" }, { "name" : "Simon Proctor", - "drilldown" : "Simon Proctor", - "y" : 1 + "y" : 1, + "drilldown" : "Simon Proctor" }, { "drilldown" : "Ulrich Rieke", - "name" : "Ulrich Rieke", - "y" : 3 + "y" : 3, + "name" : "Ulrich Rieke" }, { "drilldown" : "W. Luis Mochan", - "name" : "W. Luis Mochan", - "y" : 3 + "y" : 3, + "name" : "W. Luis Mochan" }, { + "drilldown" : "Wanderdoc", "y" : 2, - "name" : "Wanderdoc", - "drilldown" : "Wanderdoc" + "name" : "Wanderdoc" } ], + "colorByPoint" : 1, "name" : "The Weekly Challenge - 132" } ], - "legend" : { - "enabled" : 0 + "xAxis" : { + "type" : "category" }, "drilldown" : { "series" : [ { + "name" : "Abigail", + "id" : "Abigail", + "data" : [ + [ + "Perl", + 2 + ] + ] + }, + { + "id" : "Adam Russell", "data" : [ [ "Perl", 1 - ], + ] + ], + "name" : "Adam Russell" + }, + { + "name" : "Arne Sommer", + "data" : [ [ "Raku", + 2 + ], + [ + "Blog", 1 ] ], + "id" : "Arne Sommer" + }, + { + "name" : "Athanasius", "id" : "Athanasius", - "name" : "Athanasius" + "data" : [ + [ + "Perl", + 1 + ], + [ + "Raku", + 1 + ] + ] }, { - "id" : "Ben Davies", "name" : "Ben Davies", + "id" : "Ben Davies", "data" : [ [ "Raku", @@ -178,16 +202,17 @@ ] }, { - "id" : "Cheok-Yin Fung", "name" : "Cheok-Yin Fung", "data" : [ [ "Perl", 1 ] - ] + ], + "id" : "Cheok-Yin Fung" }, { + "id" : "Dave Jacoby", "data" : [ [ "Perl", @@ -198,21 +223,19 @@ 1 ] ], - "id" : "Dave Jacoby", "name" : "Dave Jacoby" }, { + "name" : "E. Choroba", "data" : [ [ "Perl", 2 ] ], - "id" : "E. Choroba", - "name" : "E. Choroba" + "id" : "E. Choroba" }, { - "name" : "Flavio Poletti", "id" : "Flavio Poletti", "data" : [ [ @@ -227,20 +250,20 @@ "Blog", 2 ] - ] + ], + "name" : "Flavio Poletti" }, { + "name" : "James Raspass", "data" : [ [ "Raku", 1 ] ], - "name" : "James Raspass", "id" : "James Raspass" }, { - "name" : "James Smith", "id" : "James Smith", "data" : [ [ @@ -251,31 +274,32 @@ "Blog", 1 ] - ] + ], + "name" : "James Smith" }, { + "name" : "Jan Krnavek", + "id" : "Jan Krnavek", "data" : [ [ "Raku", 1 ] - ], - "name" : "Jan Krnavek", - "id" : "Jan Krnavek" + ] }, { - "id" : "Jorg Sommrey", "name" : "Jorg Sommrey", "data" : [ [ "Perl", 2 ] - ] + ], + "id" : "Jorg Sommrey" }, { - "id" : "Laurent Rosenfeld", "name" : "Laurent Rosenfeld", + "id" : "Laurent Rosenfeld", |
