diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2024-02-13 01:29:34 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2024-02-13 01:29:34 +0000 |
| commit | 94d2ed24dcd44638355ac7c5084e05d8b8ca9f41 (patch) | |
| tree | c464d8b2de64858f820db20ffd1e4ca3989cca99 | |
| parent | 5f9ad3eb76b08a6e2adbae41552dbeb88d122485 (diff) | |
| download | perlweeklychallenge-club-94d2ed24dcd44638355ac7c5084e05d8b8ca9f41.tar.gz perlweeklychallenge-club-94d2ed24dcd44638355ac7c5084e05d8b8ca9f41.tar.bz2 perlweeklychallenge-club-94d2ed24dcd44638355ac7c5084e05d8b8ca9f41.zip | |
- Added solutions by Eric Cheung.
- Added solutions by Ulrich Rieke.
- Added solutions by Laurent Rosenfeld.
- Added solutions by Ali Moradi.
- Added solutions by Mark Anderson.
- Added solutions by Niels van Dijke.
- Added solutions by E. Choroba.
- Added solutions by PokGoPun.
- Added solutions by Stephen G Lynn.
- Added solutions by Stevem Wilson.
- Added solutions by Peter Campbell Smith.
- Added solutions by Peter Meszaros.
- Added solutions by Andrew Shitov.
- Added solutions by Thomas Kohler.
- Added solutions by Matthew Neleigh.
- Added solutions by Arne Sommer.
34 files changed, 3647 insertions, 3000 deletions
diff --git a/challenge-256/eric-cheung/python/ch-1.py b/challenge-256/eric-cheung/python/ch-1.py new file mode 100755 index 0000000000..7fad78fbe6 --- /dev/null +++ b/challenge-256/eric-cheung/python/ch-1.py @@ -0,0 +1,8 @@ +
+## arrWords = ["ab", "de", "ed", "bc"] ## Example 1
+## arrWords = ["aa", "ba", "cd", "ed"] ## Example 2
+arrWords = ["uv", "qp", "st", "vu", "mn", "pq"] ## Example 3
+
+arrOutput = [arrWords[nRowLoop] for nRowLoop in range(len(arrWords) - 1) for nColLoop in range(nRowLoop + 1, len(arrWords)) if arrWords[nRowLoop] == arrWords[nColLoop][::-1]]
+
+print (len(arrOutput))
diff --git a/challenge-256/eric-cheung/python/ch-2.py b/challenge-256/eric-cheung/python/ch-2.py new file mode 100755 index 0000000000..ca9867af98 --- /dev/null +++ b/challenge-256/eric-cheung/python/ch-2.py @@ -0,0 +1,17 @@ +
+## Example 1
+## strIn_01 = "abcd"
+## strIn_02 = "1234"
+
+## Example 2
+## strIn_01 = "abc"
+## strIn_02 = "12345"
+
+## Example 3
+strIn_01 = "abcde"
+strIn_02 = "123"
+
+nMinLen = min(len(strIn_01), len(strIn_02))
+strOutput = "".join([strLoop_01 + strLoop_02 for strLoop_01, strLoop_02 in zip(strIn_01[:nMinLen], strIn_02[:nMinLen])]) + (strIn_01[nMinLen:] if len(strIn_01) > len(strIn_02) else strIn_02[nMinLen:] if len(strIn_02) > len(strIn_01) else "")
+
+print (strOutput)
diff --git a/challenge-256/laurent-rosenfeld/blog.txt b/challenge-256/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..f7e948cb8e --- /dev/null +++ b/challenge-256/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +https://blogs.perl.org/users/laurent_r/2024/02/perl-weekly-challenge-256-maximum-pairs.html diff --git a/challenge-256/laurent-rosenfeld/perl/ch-1.pl b/challenge-256/laurent-rosenfeld/perl/ch-1.pl new file mode 100644 index 0000000000..a6e07491fc --- /dev/null +++ b/challenge-256/laurent-rosenfeld/perl/ch-1.pl @@ -0,0 +1,21 @@ +use strict; +use warnings; +use feature 'say'; + +sub find_pairs { + my @in = @_; + my $nb_pairs = 0; + for my $i (0..$#in) { + for my $j ($i + 1 ..$#in) { + $nb_pairs++ if $in[$i] eq reverse $in[$j]; + } + } + return $nb_pairs; +} + +my @tests = ([<ab de ed bc>], [<aa ba cd ed>], + [<uv qp st vu mn pq>]); +for my $test (@tests) { + printf "%-20s => ", "@$test"; + say find_pairs @$test; +} diff --git a/challenge-256/laurent-rosenfeld/raku/ch-1.raku b/challenge-256/laurent-rosenfeld/raku/ch-1.raku new file mode 100644 index 0000000000..92209aae8a --- /dev/null +++ b/challenge-256/laurent-rosenfeld/raku/ch-1.raku @@ -0,0 +1,15 @@ +sub find-pairs (@in) { + my $nb-pairs = 0; + for 0..@in.end -> $i { + for $i^..@in.end -> $j { + $nb-pairs++ if @in[$i] eq @in[$j].flip; + } + } + return $nb-pairs; +} + +my @tests = <ab de ed bc>, <aa ba cd ed>, <uv qp st vu mn pq> ; +for @tests -> @test { + printf "%-20s => ", "@test[]"; + say find-pairs @test; +} diff --git a/challenge-256/perlboy1967/perl/ch1.pl b/challenge-256/perlboy1967/perl/ch-1.pl index e08c285dd4..e08c285dd4 100755 --- a/challenge-256/perlboy1967/perl/ch1.pl +++ b/challenge-256/perlboy1967/perl/ch-1.pl diff --git a/challenge-256/perlboy1967/perl/ch2.pl b/challenge-256/perlboy1967/perl/ch-2.pl index 0d47872c79..0d47872c79 100755 --- a/challenge-256/perlboy1967/perl/ch2.pl +++ b/challenge-256/perlboy1967/perl/ch-2.pl diff --git a/challenge-256/ulrich-rieke/cpp/ch-1.cpp b/challenge-256/ulrich-rieke/cpp/ch-1.cpp new file mode 100755 index 0000000000..3fe241b75b --- /dev/null +++ b/challenge-256/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,40 @@ +#include <vector>
+#include <iostream>
+#include <set>
+#include <string>
+#include <algorithm>
+#include <iterator>
+
+std::vector<std::string> split( const std::string & startline ,
+ const std::string & sep ) {
+ std::vector<std::string> separated ;
+ std::string::size_type start { 0 } ;
+ std::string::size_type pos ;
+ do {
+ pos = startline.find_first_of( sep , start ) ;
+ separated.push_back( startline.substr(start , pos - start )) ;
+ start = pos + 1 ;
+ } while ( pos != std::string::npos ) ;
+ return separated ;
+}
+
+int main( ) {
+ std::cout << "Enter some strings, separated by blanks!\n" ;
+ std::string line ;
+ std::getline( std::cin , line ) ;
+ std::vector<std::string> words { split( line , " " ) } ;
+ std::set<std::string> ortho( words.begin( ) , words.end( ) ) ;
+ std::set<std::string> reversed ;
+ for ( auto w : words ) {
+ std::string for_reverse { w } ;
+ std::reverse( for_reverse.begin( ) , for_reverse.end( ) ) ;
+ reversed.insert( for_reverse ) ;
+ }
+ std::set<std::string> common ;
+ std::set_intersection( ortho.begin( ) , ortho.end( ) ,
+ reversed.begin( ) , reversed.end( ) , std::inserter( common ,
+ common.begin( ) ) ) ;
+ std::cout << common.size( ) / 2 << '\n' ;
+ return 0 ;
+}
+
diff --git a/challenge-256/ulrich-rieke/cpp/ch-2.cpp b/challenge-256/ulrich-rieke/cpp/ch-2.cpp new file mode 100755 index 0000000000..a07ffad95a --- /dev/null +++ b/challenge-256/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,52 @@ +#include <iostream>
+#include <vector>
+#include <string>
+#include <algorithm>
+
+std::vector<std::string> split( const std::string & startline ,
+ const std::string & sep ) {
+ std::vector<std::string> separated ;
+ std::string::size_type start { 0 } ;
+ std::string::size_type pos ;
+ do {
+ pos = startline.find_first_of( sep , start ) ;
+ separated.push_back( startline.substr(start , pos - start )) ;
+ start = pos + 1 ;
+ } while ( pos != std::string::npos ) ;
+ return separated ;
+}
+
+int main( ) {
+ std::cout << "Enter 2 strings, separated by blanks!\n" ;
+ std::string line ;
+ std::getline( std::cin , line ) ;
+ std::vector<std::string> words { split( line, " " ) } ;
+ std::string merged ;
+ int len1 = words[0].length( ) ;
+ int len2 = words[1].length( ) ;
+ if ( len1 != len2 ) {
+ int smaller = std::min( len1 , len2 ) ;
+ for ( int i = 0 ; i < smaller ; i++ ) {
+ merged += words[0].substr( i, 1 ) ;
+ merged += words[1].substr( i , 1 ) ;
+ }
+ if ( len1 > len2 ) {
+ for ( int i = smaller ; i < len1 ; i++ ) {
+ merged += words[0].substr( i , 1 ) ;
+ }
+ }
+ else {
+ for ( int i = smaller ; i < len2 ; i++ ) {
+ merged += words[1].substr( i , 1 ) ;
+ }
+ }
+ }
+ else {
+ for ( int i = 0 ; i < len1 ; i++ ) {
+ merged += words[0].substr( i , 1 ) ;
+ merged += words[1].substr( i , 1 ) ;
+ }
+ }
+ std::cout << merged << '\n' ;
+ return 0 ;
+}
diff --git a/challenge-256/ulrich-rieke/haskell/ch-1.hs b/challenge-256/ulrich-rieke/haskell/ch-1.hs new file mode 100755 index 0000000000..1978eb07a0 --- /dev/null +++ b/challenge-256/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,15 @@ +module Challenge256
+ where
+import qualified Data.Set as S
+
+solution :: [String] -> Int
+solution strings =
+ let ortho = S.fromList strings
+ reversed = S.fromList $ map reverse strings
+ in div ( S.size $ S.intersection ortho reversed ) 2
+
+main :: IO ( )
+main = do
+ putStrLn "Enter some strings, separated by blanks!"
+ line <- getLine
+ print $ solution $ words line
diff --git a/challenge-256/ulrich-rieke/haskell/ch-2.hs b/challenge-256/ulrich-rieke/haskell/ch-2.hs new file mode 100755 index 0000000000..1405984f94 --- /dev/null +++ b/challenge-256/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,11 @@ +module Challenge256_2
+ where
+
+solution :: String -> String -> String
+solution s1 s2 = (foldl1 ( ++ ) $ map (\p -> [fst p] ++ [snd p] ) common )
+ ++ drop ( length common ) longer
+ where
+ common :: [(Char, Char)]
+ common = zip s1 s2
+ longer :: String
+ longer = if ( length s1 > length s2 ) then s1 else s2
diff --git a/challenge-256/ulrich-rieke/perl/ch-1.pl b/challenge-256/ulrich-rieke/perl/ch-1.pl new file mode 100755 index 0000000000..65de195461 --- /dev/null +++ b/challenge-256/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,24 @@ +use v5.36.0 ;
+
+say "Enter some words, separated by blanks!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my @strings = split( /\s+/ , $line ) ;
+my @reversed = map { join( '' , reverse split( // , $_ ) ) } @strings ;
+my %ortho ;
+my %rev ;
+my %common ;
+for my $s ( @strings ) {
+ $ortho{$s}++ ;
+}
+for my $s ( @reversed ) {
+ $rev{ $s }++ ;
+}
+for my $s ( keys %ortho ) {
+ if ( exists( $rev{ $s } ) ) {
+ $common{$s}++ ;
+ }
+}
+say int (scalar( keys %common ) / 2 ) ;
+
+
diff --git a/challenge-256/ulrich-rieke/perl/ch-2.pl b/challenge-256/ulrich-rieke/perl/ch-2.pl new file mode 100755 index 0000000000..0a73c190a4 --- /dev/null +++ b/challenge-256/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,39 @@ +use v5.36.0 ;
+
+say "Enter two words, separated by blanks!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my ($firstString , $secondString) = split( /\s+/ , $line ) ;
+my $len1 = length $firstString ;
+my $len2 = length $secondString ;
+my $merged ;
+if ( $len1 != $len2 ) {
+ my $smaller ;
+ if ( $len1 < $len2 ) {
+ $smaller = $len1 ;
+ }
+ else {
+ $smaller = $len2 ;
+ }
+ for my $pos( 0..$smaller - 1 ) {
+ $merged .= (substr( $firstString, $pos , 1 ) . substr( $secondString ,
+ $pos , 1 )) ;
+ }
+ if ( $len1 > $len2 ) {
+ for my $pos( $smaller..$len1 - 1 ) {
+ $merged .= substr( $firstString , $pos , 1 ) ;
+ }
+ }
+ else {
+ for my $pos ( $smaller..$len2 - 1 ) {
+ $merged .= substr( $secondString, $pos , 1 ) ;
+ }
+ }
+}
+else {
+ for my $pos (0..$len1 - 1) {
+ $merged .= ( substr( $firstString, $pos , 1 ) . substr(
+ $secondString, $pos , 1 ) ) ;
+ }
+}
+say $merged ;
diff --git a/challenge-256/ulrich-rieke/raku/ch-1.raku b/challenge-256/ulrich-rieke/raku/ch-1.raku new file mode 100755 index 0000000000..a486f6532c --- /dev/null +++ b/challenge-256/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,8 @@ +use v6 ;
+
+say "Enter some words, separated by blanks!" ;
+my $line = $*IN.get ;
+my @strings = $line.words ;
+my @reversed = @strings.map( {$_.comb.reverse.join} ) ;
+my $common = @strings.Set (&) @reversed.Set ;
+say $common.keys.elems div 2 ;
diff --git a/challenge-256/ulrich-rieke/raku/ch-2.raku b/challenge-256/ulrich-rieke/raku/ch-2.raku new file mode 100755 index 0000000000..5b1e0eb144 --- /dev/null +++ b/challenge-256/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,24 @@ +use v6 ;
+
+say "Enter two strings, separated by blanks!" ;
+my $line = $*IN.get ;
+my @strings = $line.words ;
+#create zip-wise combinations of letters of the two words, stopping
+#when the shorter of the 2 words runs out of characters
+my @merged = @strings[0].comb Z~ @strings[1].comb ;
+my $len1 = @strings[0].chars ;
+my $len2 = @strings[1].chars ;
+if ( $len1 != $len2 ) {
+ my $smaller = @merged.elems ;#character in the shorter of the two strings
+ if ( $len1 < $len2 ) {
+ for ($smaller..$len2 - 1 ) -> $pos { #add the remaining characters
+ @merged.push( @strings[1].substr( $pos , 1 ) ) ;
+ }
+ }
+ else {
+ for ($smaller..$len1 - 1 ) -> $pos { #add the remaining characters
+ @merged.push( @strings[0].substr( $pos , 1 ) ) ;
+ }
+ }
+}
+say @merged.join ;
diff --git a/challenge-256/ulrich-rieke/rust/ch-1.rs b/challenge-256/ulrich-rieke/rust/ch-1.rs new file mode 100755 index 0000000000..64b552202b --- /dev/null +++ b/challenge-256/ulrich-rieke/rust/ch-1.rs @@ -0,0 +1,33 @@ +use std::io ; +use std::collections::HashSet ; + +//the principle of the solution is : create 2 sets of words, one orthodromic +//and the other of the reversed words. The size of the intersection is the +//number of pairs + +fn main() { + println!("Enter some words, separated by blanks!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let entered_line : &str = &*inline ; + let strings : Vec<&str> = entered_line.split_whitespace( ).map( | s | + s.trim( ) ).collect( ) ; + let mut orthodromic : HashSet<String> = HashSet::new( ) ; + for s in &strings { + let ortho = s.to_string( ) ; + orthodromic.insert( ortho ) ; + } + let mut reversed : HashSet<String> = HashSet::new( ) ; + for w in &orthodromic { + let mut reverse_str : String = String::new( ) ; + let mut iter = w.chars( ).rev( ) ; + while let Some( c ) = iter.next( ) { + reverse_str.push( c ) ; + } + reversed.insert( reverse_str ) ; + } + let common : HashSet<_> = orthodromic.intersection( &reversed ). + collect( ) ; + println!("{}" , common.len( ) / 2 ) ; //we look at pairs, so we have + //to divide by 2 +} diff --git a/challenge-256/ulrich-rieke/rust/ch-2.rs b/challenge-256/ulrich-rieke/rust/ch-2.rs new file mode 100755 index 0000000000..22287d35b2 --- /dev/null +++ b/challenge-256/ulrich-rieke/rust/ch-2.rs @@ -0,0 +1,33 @@ +use std::io ; + +fn main() { + println!("Enter two strings, separated by blanks!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let entered_line : &str = &*inline ; + let strings : Vec<&str> = entered_line.split_whitespace( ).map( | s | + s.trim( ) ).collect( ) ; + let mut merged : String = String::new( ) ; + let first_string : &str = strings[0] ; + let second_string : &str = strings[1] ; + first_string.chars( ).zip( second_string.chars( )).for_each( | p | { + merged.push( p.0 ) ; + merged.push( p.1 ) + } ) ; + let len1 : usize = first_string.len( ) ; + let len2 : usize = second_string.len( ) ; + if len1 != len2 { + let smaller : usize = merged.len( ) / 2 ; + if len1 > len2 { + for i in smaller .. len1 { + merged.push( first_string.chars( ).nth( i ).unwrap( ) ) ; + } + } + else { + for i in smaller .. len2 { + merged.push( second_string.chars( ).nth( i ).unwrap( ) ) ; + } + } + } + println!("{:?}" , merged) ; +} diff --git a/stats/pwc-challenge-255.json b/stats/pwc-challenge-255.json new file mode 100644 index 0000000000..7fc659ce11 --- /dev/null +++ b/stats/pwc-challenge-255.json @@ -0,0 +1,669 @@ +{ + "series" : [ + { + "colorByPoint" : 1, + "data" : [ + { + "drilldown" : "Ali Moradi", + "y" : 3, + "name" : "Ali Moradi" + }, + { + "drilldown" : "Arne Sommer", + "name" : "Arne Sommer", + "y" : 3 + }, + { + "y" : 4, + "name" : "Athanasius", + "drilldown" : "Athanasius" + }, + { + "drilldown" : "BarrOff", + "name" : "BarrOff", + "y" : 3 + }, + { + "name" : "Bob Lied", + "y" : 3, + "drilldown" : "Bob Lied" + }, + { + "drilldown" : "Bruce Gray", + "name" : "Bruce Gray", + "y" : 2 + }, + { + "drilldown" : "Cheok-Yin Fung", + "y" : 2, + "name" : "Cheok-Yin Fung" + }, + { + "drilldown" : "Dave Jacoby", + "y" : 3, + "name" : "Dave Jacoby" + }, + { + "drilldown" : "David Ferrone", + "name" : "David Ferrone", + "y" : 2 + }, + { + "drilldown" : "E. Choroba", + "name" : "E. Choroba", + "y" : 2 + }, + { + "drilldown" : "Jaldhar H. Vyas", + "name" : "Jaldhar H. Vyas", + "y" : 5 + }, + { + "y" : 2, + "name" : "Jan Krnavek", + "drilldown" : "Jan Krnavek" + }, + { + "drilldown" : "Jorg Sommrey", + "y" : 3, + "name" : "Jorg Sommrey" + }, + { + "drilldown" : "Kjetil Skotheim", + "y" : 2, + "name" : "Kjetil Skotheim" + }, + { + "y" : 6, + "name" : "Laurent Rosenfeld", + "drilldown" : "Laurent Rosenfeld" + }, + { + "name" : "Lubos Kolouch", + "y" : 4, + "drilldown" : "Lubos Kolouch" + }, + { + "drilldown" : "Luca Ferrari", + "name" : "Luca Ferrari", + "y" : 11 + }, + { + "y" : 2, + "name" : "Mariano Spadaccini", + "drilldown" : "Mariano Spadaccini" + }, + { + "drilldown" : "Mark Anderson", + "y" : 2, + "name" : "Mark Anderson" + }, + { + "drilldown" : "Matthew Neleigh", + "y" : 2, + "name" : "Matthew Neleigh" + }, + { + "drilldown" : "Nelo Tovar", + "y" : 2, + "name" : "Nelo Tovar" + }, + { + "drilldown" : "Niels van Dijke", + "y" : 2, + "name" : "Niels van Dijke" + }, + { + "drilldown" : "Packy Anderson", + "name" : "Packy Anderson", + "y" : 5 + }, + { + "drilldown" : "Peter Campbell Smith", + "name" : "Peter Campbell Smith", + "y" : 3 + }, + { + "y" : 2, + "name" : "Peter Meszaros", + "drilldown" : "Peter Meszaros" + }, + { + "y" : 3, + "name" : "Robbie Hatley", + "drilldown" : "Robbie Hatley" + }, + { + "y" : 2, + "name" : "Robert Ransbottom", + "drilldown" : "Robert Ransbottom" + }, + { + "drilldown" : "Roger Bell_West", + "name" : "Roger Bell_West", + "y" : 5 + }, + { + "drilldown" : "Simon Green", + "y" : 3, + "name" : "Simon Green" + }, + { + "drilldown" : "Simon Proctor", + "y" : 2, + "name" : "Simon Proctor" + }, + { + "name" : "Stephen G. Lynn", + "y" : 3, + "drilldown" : "Stephen G. Lynn" + }, + { + "drilldown" : "Thomas Kohler", + "name" : "Thomas Kohler", + "y" : 4 + }, + { + "drilldown" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "y" : 4 + }, + { + "drilldown" : "W. Luis Mochan", + "y" : 3, + "name" : "W. Luis Mochan" + }, + { + "drilldown" : "Wanderdoc", + "name" : "Wanderdoc", + "y" : 2 + } + ], + "name" : "The Weekly Challenge - 255" + } + ], + "drilldown" : { + "series" : [ + { + "name" : "Ali Moradi", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Ali Moradi" + }, + { + "data" : [ + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ], + "name" : "Arne Sommer", + "id" : "Arne Sommer" + }, + { + "name" : "Athanasius", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] + ], + "id" : "Athanasius" + }, + { + "id" : "BarrOff", + "name" : "BarrOff", + "data" : [ + [ + "Perl", + 1 + ], + [ + "Raku", + 2 + ] + ] + }, + { + "name" : "Bob Lied", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Bob Lied" + }, + { + "name" : "Bruce Gray", + "data" : [ + [ + "Raku", + 2 + ] + ], + "id" : "Bruce Gray" + }, + { + "id" : "Cheok-Yin Fung", + "name" : "Cheok-Yin Fung", + "data" : [ + [ + "Perl", + 2 + ] + ] + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "name" : "Dave Jacoby", + "id" : "Dave Jacoby" + }, + { + "name" : "David Ferrone", + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "David Ferrone" + }, + { + "id" : "E. Choroba", + "data" : [ + [ + "Perl", + 2 + ] + ], + "name" : "E. Choroba" + }, + { + "id" : "Jaldhar H. Vyas", + "name" : "Jaldhar H. Vyas", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "name" : "Jan Krnavek", + "data" : [ + [ + "Raku", + 2 + ] + ], + "id" : "Jan Krnavek" + }, + { + "name" : "Jorg Sommrey", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Jorg Sommrey" + }, + { + "id" : "Kjetil Skotheim", + "data" : [ + [ + "Perl", + 2 + ]< |
