diff options
| author | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2025-11-18 10:16:58 +0000 |
|---|---|---|
| committer | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2025-11-18 10:16:58 +0000 |
| commit | 25572447da12014ff4f20d22dcc3260e8a906f99 (patch) | |
| tree | a1d36f2bc9a7df09a928792e4009ad7559c0cab3 | |
| parent | 544648414e896c492fe390f115a5f0a5bba61bc0 (diff) | |
| download | perlweeklychallenge-club-25572447da12014ff4f20d22dcc3260e8a906f99.tar.gz perlweeklychallenge-club-25572447da12014ff4f20d22dcc3260e8a906f99.tar.bz2 perlweeklychallenge-club-25572447da12014ff4f20d22dcc3260e8a906f99.zip | |
- Added solutions by Eric Cheung.
- Added solutions by Ulrich Rieke.
- Added solutions by David Ferrone.
- Added solutions by Mark Anderson.
- Added solutions by Peter Meszaros.
- Added solutions by Andreas Mahnke.
- Added solutions by PokGoPun.
- Added solutions by Benjamin Andre.
- Added solutions by Ali Moradi.
- Added solutions by E. Choroba.
- Added solutions by Niels van Dijke.
- Added solutions by W. Luis Mochan.
- Added solutions by Matthew Neleigh.
- Added solutions by Thomas Kohler.
- Added solutions by Athanasius.
40 files changed, 1044 insertions, 393 deletions
diff --git a/challenge-348/eric-cheung/python/ch-1.py b/challenge-348/eric-cheung/python/ch-1.py new file mode 100755 index 0000000000..4848b52c72 --- /dev/null +++ b/challenge-348/eric-cheung/python/ch-1.py @@ -0,0 +1,15 @@ +
+## strInput = "textbook" ## Example 1
+## strInput = "book" ## Example 2
+## strInput = "AbCdEfGh" ## Example 3
+## strInput = "rhythmmyth" ## Example 4
+strInput = "UmpireeAudio" ## Example 5
+
+arrVowel = ["a", "e", "i", "o", "u"]
+
+nLen = int(len(strInput) / 2)
+
+nVowel_01 = len([charLoop for charLoop in strInput[:nLen].lower() if charLoop in arrVowel])
+nVowel_02 = len([charLoop for charLoop in strInput[nLen:].lower() if charLoop in arrVowel])
+
+print (nVowel_01 == nVowel_02 and nVowel_01 > 0)
diff --git a/challenge-348/eric-cheung/python/ch-2.py b/challenge-348/eric-cheung/python/ch-2.py new file mode 100755 index 0000000000..5f2d6f9969 --- /dev/null +++ b/challenge-348/eric-cheung/python/ch-2.py @@ -0,0 +1,39 @@ +
+from datetime import datetime, timedelta
+
+## Example 1
+## strSource = "02:30"
+## strTarget = "02:45"
+
+## Example 2
+## strSource = "11:55"
+## strTarget = "12:15"
+
+## Example 3
+## strSource = "09:00"
+## strTarget = "13:00"
+
+## Example 4
+## strSource = "23:45"
+## strTarget = "00:30"
+
+## Example 5
+strSource = "14:20"
+strTarget = "15:25"
+
+arrMin = [60, 15, 5, 1]
+strTimeFormat = "%H:%M"
+
+nDayAdd = (1 if strSource > strTarget else 0)
+
+objSource = datetime.strptime(strSource, strTimeFormat)
+objTarget = datetime.strptime(strTarget, strTimeFormat) + timedelta(days = nDayAdd)
+
+nMinDiff = int((objTarget - objSource).total_seconds() / 60)
+nOperation = 0
+
+for nMinLoop in arrMin:
+ nOperation = nOperation + int(nMinDiff / nMinLoop)
+ nMinDiff = nMinDiff - int(nMinDiff / nMinLoop) * nMinLoop
+
+print (nOperation)
diff --git a/challenge-348/perlboy1967/perl/ch1.pl b/challenge-348/perlboy1967/perl/ch-1.pl index 9ec38e6739..9ec38e6739 100755 --- a/challenge-348/perlboy1967/perl/ch1.pl +++ b/challenge-348/perlboy1967/perl/ch-1.pl diff --git a/challenge-348/perlboy1967/perl/ch2.pl b/challenge-348/perlboy1967/perl/ch-2.pl index 53b83e6eb5..53b83e6eb5 100755 --- a/challenge-348/perlboy1967/perl/ch2.pl +++ b/challenge-348/perlboy1967/perl/ch-2.pl diff --git a/challenge-348/ulrich-rieke/cpp/ch-1.cpp b/challenge-348/ulrich-rieke/cpp/ch-1.cpp new file mode 100755 index 0000000000..e36d1ba792 --- /dev/null +++ b/challenge-348/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,29 @@ +#include <string>
+#include <iostream>
+
+bool solution( const std::string & word ) {
+ static std::string vowels {"aAeEiIoOuU"} ;
+ int len = static_cast<int>( word.length( ) ) ;
+ int firstvowels = 0 ;
+ int secondvowels = 0 ;
+ for ( char d : word.substr( 0 , len / 2 )) {
+ if ( vowels.find( d ) != std::string::npos ) {
+ firstvowels++ ;
+ }
+ }
+ for ( char d : word.substr( len / 2 )) {
+ if ( vowels.find( d ) != std::string::npos ) {
+ secondvowels++ ;
+ }
+ }
+ return firstvowels == secondvowels ;
+}
+
+int main( ) {
+ std::cout << std::boolalpha << solution( "textbook" ) << '\n' ;
+ std::cout << std::boolalpha << solution( "book" ) << '\n' ;
+ std::cout << std::boolalpha << solution( "AbCdEfGh" ) << '\n' ;
+ std::cout << std::boolalpha << solution( "rhythmmyth" ) << '\n' ;
+ std::cout << std::boolalpha << solution( "UmpireeAudio" ) << '\n' ;
+ return 0 ;
+}
diff --git a/challenge-348/ulrich-rieke/cpp/ch-2.cpp b/challenge-348/ulrich-rieke/cpp/ch-2.cpp new file mode 100755 index 0000000000..597b2e84a7 --- /dev/null +++ b/challenge-348/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,38 @@ +#include <iostream>
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <numeric>
+
+int main( ) {
+ std::cout << "Enter a source time!\n" ;
+ std::string source , target ;
+ std::cin >> source ;
+ std::cout << "Enter a target time!\n" ;
+ std::cin >> target ;
+ int sourcehours { std::stoi( source.substr( 0 , 2 )) } ;
+ int sourceminutes { std::stoi( source.substr( 3 ) ) } ;
+ int targethours { std::stoi( target.substr( 0 , 2 ) ) } ;
+ int targetminutes { std::stoi( target.substr( 3 ) ) } ;
+ if ( targethours < sourcehours ) {
+ targethours += 24 ;
+ }
+ std::vector<int> ops { 1 , 5 , 15 , 60 } ;
+ int diffminutes = targethours * 60 + targetminutes - ( sourcehours *
+ 60 + sourceminutes ) ;
+ std::vector<int> operations ;
+ while ( diffminutes != 0 ) {
+ std::vector<int> smaller ;
+ for ( auto n : ops ) {
+ if ( n <= diffminutes ) {
+ smaller.push_back( n ) ;
+ }
+ }
+ int divisor = *std::max_element( smaller.begin( ) , smaller.end( )) ;
+ operations.push_back( diffminutes / divisor ) ;
+ diffminutes -= divisor * operations.back( ) ;
+ }
+ std::cout << std::accumulate( operations.begin( ) , operations.end( ) , 0 )
+ << '\n' ;
+ return 0 ;
+}
diff --git a/challenge-348/ulrich-rieke/haskell/ch-1.hs b/challenge-348/ulrich-rieke/haskell/ch-1.hs new file mode 100755 index 0000000000..1ad5f80b08 --- /dev/null +++ b/challenge-348/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,23 @@ +module Challenge348
+ where
+
+solution :: String -> Bool
+solution str = (length $ filter ( flip elem vowels ) firsthalf) == (length $ filter
+ ( flip elem vowels ) secondhalf )
+ where
+ vowels :: [Char]
+ vowels = "aAeEiIoOuU"
+ l :: Int
+ l = length str
+ firsthalf :: String
+ firsthalf = take ( div l 2 ) str
+ secondhalf :: String
+ secondhalf = drop ( div l 2 ) str
+
+main :: IO ( )
+main = do
+ print $ solution "textbook"
+ print $ solution "book"
+ print $ solution "AbCdEfGh"
+ print $ solution "rhythmmyth"
+ print $ solution "UmpireeAudio"
diff --git a/challenge-348/ulrich-rieke/haskell/ch-2.hs b/challenge-348/ulrich-rieke/haskell/ch-2.hs new file mode 100755 index 0000000000..5d89fd94a5 --- /dev/null +++ b/challenge-348/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,34 @@ +module Challenge348_2
+ where
+import Data.List ( sort )
+
+ops :: [Int]
+ops = [1 , 5 , 15 , 60]
+
+findDiffMinutes :: String -> String -> Int
+findDiffMinutes source target =
+ let sourcehours = read $ take 2 source
+ sourceminutes = read $ take 2 $ drop 3 source
+ targethours = read $ take 2 target
+ targetminutes = read $ take 2 $ drop 3 target
+ in if targethours < sourcehours then ( targethours + 24 ) * 60 + targetminutes
+ - ( sourcehours * 60 + sourceminutes ) else targethours * 60 + targetminutes
+ - ( sourcehours * 60 + sourceminutes )
+
+findOps :: Int -> Int
+findOps diffMinutes = head $ sort $ map sumTuple $ [(a , b , c , d) | a <- [0..
+ diffMinutes] , b <- [0..div diffMinutes 5] , c <- [0..div diffMinutes 15] , d <-
+ [0..div diffMinutes 60] , a * 1 + b * 5 + c * 15 + d * 60 == diffMinutes]
+ where
+ sumTuple :: (Int , Int , Int , Int ) -> Int
+ sumTuple ( a , b , c , d) = a + b + c + d
+
+main :: IO ( )
+main = do
+ putStrLn "Enter a source time!"
+ sourcetime <- getLine
+ putStrLn "Enter a target time!"
+ targettime <- getLine
+ let diffMinutes = findDiffMinutes sourcetime targettime
+ print $ findOps diffMinutes
+
diff --git a/challenge-348/ulrich-rieke/perl/ch-1.pl b/challenge-348/ulrich-rieke/perl/ch-1.pl new file mode 100755 index 0000000000..86aea99827 --- /dev/null +++ b/challenge-348/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,35 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+sub solution {
+ my $word = shift ;
+ my $vowels = "AaeEiIoOuU" ;
+ my $firstvowels = 0 ;
+ my $secondvowels = 0 ;
+ my $len = length $word ;
+ for my $c( split( // , substr( $word , 0 , $len / 2 ))) {
+ if ( index($vowels , $c) != -1 ) {
+ $firstvowels++ ;
+ }
+ }
+ for my $c ( split( // , substr( $word , $len / 2 ))) {
+ if ( index( $vowels , $c ) != -1 ) {
+ $secondvowels++ ;
+ }
+ }
+ if ( $firstvowels == $secondvowels ) {
+ return "true" ;
+ }
+ else {
+ return "false" ;
+ }
+}
+say solution("textbook") ;
+say solution( "book" ) ;
+say solution( "AbCdEfGh" ) ;
+say solution( "rhythmmyth" ) ;
+say solution( "UmpireeAudio" ) ;
+
+
diff --git a/challenge-348/ulrich-rieke/perl/ch-2.pl b/challenge-348/ulrich-rieke/perl/ch-2.pl new file mode 100755 index 0000000000..41cdcaaf87 --- /dev/null +++ b/challenge-348/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,33 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+use List::Util qw ( max sum) ;
+
+say "Enter a source time!" ;
+my $source = <STDIN> ;
+chomp $source ;
+say "Enter a target time!" ;
+my $target = <STDIN> ;
+chomp $target ;
+my ( $sourcehours , $sourceminutes , $targethours , $targetminutes ) ;
+if ( $source =~ /(\d{2}):(\d{2})/ ) {
+ ($sourcehours , $sourceminutes ) = ( $1 , $2 ) ;
+}
+if ( $target =~ /(\d{2})\:(\d{2})/ ) {
+ ( $targethours , $targetminutes ) = ($1 , $2 ) ;
+}
+if ( $targethours < $sourcehours ) {
+ $targethours += 24 ;
+}
+my @ops = (1 , 5 , 15 , 60 ) ;
+my @operations ;
+my $diffminutes = $targethours * 60 + $targetminutes - ( $sourcehours * 60
+ + $sourceminutes ) ;
+while ( $diffminutes != 0 ) {
+ my @smaller = grep { $_ <= $diffminutes } @ops ;
+ my $divisor = max( @smaller ) ;
+ push( @operations , int( $diffminutes / $divisor ) ) ;
+ $diffminutes -= $divisor * $operations[-1] ;
+}
+say sum( @operations ) ;
diff --git a/challenge-348/ulrich-rieke/python/ch-1.py b/challenge-348/ulrich-rieke/python/ch-1.py new file mode 100755 index 0000000000..387ef11229 --- /dev/null +++ b/challenge-348/ulrich-rieke/python/ch-1.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3
+def solution(word):
+ vowels = "aAeEiIoOuU"
+ leng = len( word )
+ firstvowels = 0
+ secondvowels = 0
+ for c in word[0:leng // 2 ]:
+ if c in vowels:
+ firstvowels += 1
+ for d in word[leng // 2:]:
+ if d in vowels:
+ secondvowels += 1
+ return firstvowels == secondvowels
+
+print( solution("textbook"))
+print( solution("book"))
+print( solution("AbCdEfGh"))
+print( solution("rhythmmyth"))
+print( solution("UmpireeAudio"))
diff --git a/challenge-348/ulrich-rieke/python/ch-2.py b/challenge-348/ulrich-rieke/python/ch-2.py new file mode 100755 index 0000000000..82d140d9da --- /dev/null +++ b/challenge-348/ulrich-rieke/python/ch-2.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3
+source = input("Enter a source time!\n")
+target = input( "Enter a target time!\n")
+(sourcehours , sourceminutes) = (int( source[0:2] ) , int(source[3:]))
+(targethours , targetminutes ) = (int( target[0:2] ) , int( target[3:] ))
+if targethours < sourcehours:
+ targethours += 24
+ops = [1 , 5 , 15 , 60]
+diffminutes = targethours * 60 + targetminutes - ( sourcehours * 60 + sourceminutes )
+operations = []
+while diffminutes != 0:
+ selected = [x for x in ops if x <= diffminutes]
+ divisor = max ( selected )
+ operations.append( diffminutes // divisor )
+ diffminutes -= divisor * operations[-1]
+print( sum( operations ) )
diff --git a/challenge-348/ulrich-rieke/raku/ch-1.raku b/challenge-348/ulrich-rieke/raku/ch-1.raku new file mode 100755 index 0000000000..afb3ebd820 --- /dev/null +++ b/challenge-348/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,16 @@ +use v6 ;
+
+sub solution( $word ) {
+ my $vowels = "aAeEiIoOuU".comb.Set ;
+ my $len = $word.chars ;
+ my $firstvowels = $word.substr(0 , $len div 2).comb.grep( {$_ (elem) $vowels} ).
+ elems ;
+ my $secondvowels = $word.substr( $len div 2 ).comb.grep( {$_ (elem) $vowels} ).
+ elems ;
+ return $firstvowels == $secondvowels ;
+}
+say( solution( "textbook" )) ;
+say( solution( "book" ) ) ;
+say( solution( "AbCdEfGh" )) ;
+say( solution( "rhythmmyth" )) ;
+say( solution ( "UmpireeAudio" ) ) ;
diff --git a/challenge-348/ulrich-rieke/raku/ch-2.raku b/challenge-348/ulrich-rieke/raku/ch-2.raku new file mode 100755 index 0000000000..ab19256f91 --- /dev/null +++ b/challenge-348/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,29 @@ +use v6 ;
+
+say "Enter a source time!" ;
+my $source = $*IN.get ;
+say "Enter a target time!" ;
+my $target = $*IN.get ;
+my @ops = (1 , 5 , 15 , 60 ) ;
+my ( $sourcehours , $sourceminutes , $targethours , $targetminutes ) ;
+if ( $source ~~ /(\d ** 2) ':' (\d ** 2 )/) {
+ ($sourcehours , $sourceminutes ) = ( +$0 , +$1 ) ;
+}
+if ( $target ~~ /(\d ** 2) ':' (\d ** 2)/ ) {
+ ($targethours , $targetminutes ) = ( +$0 , +$1 ) ;
+}
+if ( $targethours < $sourcehours ) {
+ $targethours += 24 ;
+}
+my $diffminutes = $targethours * 60 + $targetminutes - ( $sourcehours * 60
+ + $sourceminutes ) ;
+my @operations ;
+while ( $diffminutes != 0 ) {
+ my @smaller = @ops.grep( { $_ <= $diffminutes } ) ;
+ my $divisor = @smaller.max ;
+ @operations.push( $diffminutes div $divisor ) ;
+ $diffminutes -= $divisor * @operations[*-1] ;
+}
+say [+] @operations ;
+
+
diff --git a/challenge-348/ulrich-rieke/rust/ch-1.rs b/challenge-348/ulrich-rieke/rust/ch-1.rs new file mode 100755 index 0000000000..b31397c981 --- /dev/null +++ b/challenge-348/ulrich-rieke/rust/ch-1.rs @@ -0,0 +1,26 @@ +fn find_solution( word : &str ) -> bool { + let vowels : Vec<char> = vec!['A' , 'a' , 'E' , 'e' , 'I' , 'i' , 'O' , 'o' , + 'U' , 'u'] ; + let mut first_vowels : usize = 0 ; + let mut second_vowels : usize = 0 ; + let len : usize = word.chars( ).count( ) ; + for c in word.chars( ).take( len / 2 ) { + if vowels.contains( &c ) { + first_vowels += 1 ; + } + } + for c in word.chars( ).skip( len / 2 ).take( len / 2) { + if vowels.contains( &c ) { + second_vowels += 1 ; + } + } + first_vowels == second_vowels +} + +fn main() { + println!("{}" , find_solution( "textbook")); + println!("{}" , find_solution( "book" ) ) ; + println!("{}" , find_solution( "AbCdEfGh" )) ; + println!("{}" , find_solution( "rhythmmyth" )) ; + println!("{}" , find_solution( "UmpireeAudio" ) ) ; +} diff --git a/challenge-348/ulrich-rieke/rust/ch-2.rs b/challenge-348/ulrich-rieke/rust/ch-2.rs new file mode 100755 index 0000000000..52473cf0b4 --- /dev/null +++ b/challenge-348/ulrich-rieke/rust/ch-2.rs @@ -0,0 +1,28 @@ +use std::io ; + +fn main() { + println!("Enter a source time!"); + let mut source : String = String::new( ) ; + io::stdin( ).read_line( &mut source ).unwrap( ) ; + println!("Enter a target time!") ; + let mut target : String = String::new( ) ; + io::stdin( ).read_line( &mut target ).unwrap( ) ; + let dividers : Vec<u32> = vec![1 , 5 , 15 , 60] ; + let starthours : u32 = source[0..2].parse::<u32>( ).unwrap( ) ; + let startminutes : u32 = source[3..=4].parse::<u32>( ).unwrap( ) ; + let mut targethours : u32 = target[0..2].parse::<u32>( ).unwrap( ) ; + let targetminutes : u32 = target[3..=4].parse::<u32>( ).unwrap( ) ; + if targethours < starthours { + targethours += 24 ; + } + let mut diff_minutes : u32 = targethours * 60 + targetminutes - ( + starthours * 60 + startminutes ) ; + let mut operations : Vec<u32> = Vec::new( ) ; + while diff_minutes != 0 { + let divisor : u32 = *dividers.iter( ).filter( |&n| *n <= + diff_minutes ).max( ).unwrap( ) ; + operations.push( diff_minutes / divisor ) ; + diff_minutes -= divisor * operations[operations.len( ) - 1] ; + } + println!("{}" , operations.into_iter( ).sum::<u32>( ) ) ; +} diff --git a/stats/pwc-challenge-347.json b/stats/pwc-challenge-347.json new file mode 100644 index 0000000000..36480b48d7 --- /dev/null +++ b/stats/pwc-challenge-347.json @@ -0,0 +1,548 @@ +{ + "chart" : { + "type" : "column" + }, + "drilldown" : { + "series" : [ + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Ali Moradi", + "name" : "Ali Moradi" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Andreas Mahnke", + "name" : "Andreas Mahnke" + }, + { + "data" : [ + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Arne Sommer", + "name" : "Arne Sommer" + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] + ], + "id" : "Athanasius", + "name" : "Athanasius" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Bob Lied", + "name" : "Bob Lied" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "David Ferrone", + "name" : "David Ferrone" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "E. Choroba", + "name" : "E. Choroba" + }, + { + "data" : [ + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Feng Chang", + "name" : "Feng Chang" + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Jaldhar H. Vyas", + "name" : "Jaldhar H. Vyas" + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Jorg Sommrey", + "name" : "Jorg Sommrey" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Kjetil Skotheim", + "name" : "Kjetil Skotheim" + }, + { + "data" : [ + [ + "Raku", + 2 + ], + [ + "Blog", + 10 + ] + ], + "id" : "Luca Ferrari", + "name" : "Luca Ferrari" + }, + { + "data" : [ + [ + "Raku", + 2 + ] + ], + "id" : "Mark Anderson", + "name" : "Mark Anderson" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Matthew Neleigh", + "name" : "Matthew Neleigh" + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Matthias Muth", + "name" : "Matthias Muth" + }, + { + "data" : [ + [ + "Perl", + 1 + ], + [ + "Raku", + 1 + ] + ], + "id" : "Mohammad Sajid Anwar", + "name" : "Mohammad Sajid Anwar" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Niels van Dijke", + "name" : "Niels van Dijke" + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Packy Anderson", + "name" : "Packy Anderson" + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Peter Campbell Smith", + "name" : "Peter Campbell Smith" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Peter Meszaros", + "name" : "Peter Meszaros" + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] |
