diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2023-11-28 11:53:44 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2023-11-28 11:53:44 +0000 |
| commit | b60cb77fe463f9c97a8170868a2ff874554d5f41 (patch) | |
| tree | 88313e7fe2028c039dfce0ee6afc3344178d2f06 | |
| parent | 70cf619f7168f4b1d5e936cccbd82a26932a1422 (diff) | |
| download | perlweeklychallenge-club-b60cb77fe463f9c97a8170868a2ff874554d5f41.tar.gz perlweeklychallenge-club-b60cb77fe463f9c97a8170868a2ff874554d5f41.tar.bz2 perlweeklychallenge-club-b60cb77fe463f9c97a8170868a2ff874554d5f41.zip | |
- Added solutions by PokGoPun.
- Added solutions by Luca Ferrari.
- Added solutions by Humberto Massa.
- Added solutions by Niels van Dijke.
- Added solutions by Peter Campbell Smith.
- Added solutions by Dave Jacoby.
- Added solutions by Thomas Kohler.
- Added solutions by Peter Meszaros.
- Added solutions by E. Choroba.
- Added solutions by David Ferrone.
- Added solutions by W. Luis Mochan.
- Added solutions by Mariano Spadaccini.
33 files changed, 2523 insertions, 1889 deletions
diff --git a/challenge-245/clifton-wood/raku/ch-1.sh b/challenge-245/clifton-wood/raku/ch-1.sh new file mode 100644 index 0000000000..377ecf4a92 --- /dev/null +++ b/challenge-245/clifton-wood/raku/ch-1.sh @@ -0,0 +1 @@ +raku -e 'my @lang = ("perl", "c", "python"); my @popularity = (2, 1, 3); sub sort-by-popularity { (@lang [Z] @popularity).sort( *.tail ).map( *.head ) }; sort-by-popularity.gist.say; @lang = ("c++", "haskell", "java"); @popularity = (1, 3, 2); sort-by-popularity.gist.say' diff --git a/challenge-245/clifton-wood/raku/ch-2.sh b/challenge-245/clifton-wood/raku/ch-2.sh new file mode 100644 index 0000000000..2d093899f6 --- /dev/null +++ b/challenge-245/clifton-wood/raku/ch-2.sh @@ -0,0 +1 @@ +raku -e 'sub TWC245_2 (@a) { @a.combinations.map( |*.permutations ).grep( +* ).map( |*.permutations ).map( *.join.Int ).sort( -* ).grep({ $_ % 3 == 0 }).head || -1 }; (8,9, 1).&TWC245_2.say; (8, 6, 7, 1, 0).&TWC245_2.say, @(1).&TWC245_2.say' diff --git a/challenge-245/eric-cheung/python/ch-1.py b/challenge-245/eric-cheung/python/ch-1.py new file mode 100755 index 0000000000..35addf394d --- /dev/null +++ b/challenge-245/eric-cheung/python/ch-1.py @@ -0,0 +1,12 @@ +
+## Example 1
+## arrLang = ["perl", "c", "python"]
+## arrPopularity = [2, 1, 3]
+
+## Example 2
+arrLang = ["c++", "haskell", "java"]
+arrPopularity = [1, 3, 2]
+
+arrOutput = [arrLangLoop for arrPopularityLoop, arrLangLoop in sorted(zip(arrPopularity, arrLang))]
+
+print (arrOutput)
diff --git a/challenge-245/eric-cheung/python/ch-2.py b/challenge-245/eric-cheung/python/ch-2.py new file mode 100755 index 0000000000..9f531e288b --- /dev/null +++ b/challenge-245/eric-cheung/python/ch-2.py @@ -0,0 +1,8 @@ +
+## arrDigits = [8, 1, 9] ## Example 1
+arrDigits = [8, 6, 7, 1, 0] ## Example 2
+
+if sum(arrDigits) % 3 == 0:
+ print ("".join(sorted([str(DigitLoop) for DigitLoop in arrDigits], reverse = True)))
+else:
+ print (-1)
diff --git a/challenge-245/perlboy1967/perl/ch1.pl b/challenge-245/perlboy1967/perl/ch-1.pl index 93878d5564..93878d5564 100755 --- a/challenge-245/perlboy1967/perl/ch1.pl +++ b/challenge-245/perlboy1967/perl/ch-1.pl diff --git a/challenge-245/perlboy1967/perl/ch2.pl b/challenge-245/perlboy1967/perl/ch-2.pl index 8c18d7fde4..8c18d7fde4 100755 --- a/challenge-245/perlboy1967/perl/ch2.pl +++ b/challenge-245/perlboy1967/perl/ch-2.pl diff --git a/challenge-245/ulrich-rieke/cpp/ch-1.cpp b/challenge-245/ulrich-rieke/cpp/ch-1.cpp new file mode 100755 index 0000000000..fb9584efcf --- /dev/null +++ b/challenge-245/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,47 @@ +#include <vector>
+#include <iostream>
+#include <string>
+#include <algorithm>
+#include <utility>
+
+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 computer languages, separated by blanks!\n" ;
+ std::string line ;
+ std::getline( std::cin , line ) ;
+ std::vector<std::string> languages( split( line , " " ) ) ;
+ std::cout << "Enter some popularity indices, separated by blanks!\n" ;
+ std::getline( std::cin , line ) ;
+ std::vector<std::string> pops ( split( line , " " ) ) ;
+ std::vector<int> popularities ;
+ for ( auto s : pops )
+ popularities.push_back( std::stoi( s ) ) ;
+ int len = languages.size( ) ;
+ std::vector<std::pair<int , std::string>> pop_pairs ;
+ for ( int i = 0 ; i < len ; i++ ) {
+ pop_pairs.push_back( std::make_pair( popularities[ i ] , languages[ i ] ) ) ;
+ }
+ std::sort( pop_pairs.begin( ) , pop_pairs.end( ) , []( const auto & p1 ,
+ const auto & p2 ) { return p1.first < p2.first ; } ) ;
+ std::cout << "(" ;
+ for ( const auto & p : pop_pairs ) {
+ std::cout << p.second ;
+ if ( p != pop_pairs.back( ) ) {
+ std::cout << "," ;
+ }
+ }
+ std::cout << ")\n" ;
+ return 0 ;
+}
diff --git a/challenge-245/ulrich-rieke/haskell/ch-1.hs b/challenge-245/ulrich-rieke/haskell/ch-1.hs new file mode 100755 index 0000000000..76402219ac --- /dev/null +++ b/challenge-245/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,15 @@ +module Challenge245
+ where
+import Data.List ( sortOn ) ;
+
+solution :: [String] -> [Int] -> [String]
+solution languages popularities = map fst $ sortOn snd $ zip languages popularities
+
+main :: IO ( )
+main = do
+ putStrLn "Enter some computer languages, separated by blanks!"
+ languages <- getLine
+ putStrLn "Enter some corresponding popularities, separated by blanks!"
+ popularities <- getLine
+ let pops = map read $ words popularities
+ print $ solution ( words languages ) pops
diff --git a/challenge-245/ulrich-rieke/haskell/ch-2.hs b/challenge-245/ulrich-rieke/haskell/ch-2.hs new file mode 100755 index 0000000000..85e9691ca8 --- /dev/null +++ b/challenge-245/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,30 @@ +module Challenge245_2
+ where
+import Data.List ( permutations , sort )
+
+combinations :: Int -> [a] -> [[a]]
+combinations 0 _ = [[]]
+combinations n xs = [ xs !! i : x | i <- [0..(length xs ) - 1 ] ,
+ x <- combinations (n - 1 ) ( drop ( i + 1 ) xs ) ]
+
+concatenate :: [Int] -> Int
+concatenate list
+ |length list == 1 = head list
+ |otherwise = read $ foldl1 ( ++ ) $ map show list
+
+solution :: [Int] -> Int
+solution list
+ |length sorted == 0 = -1
+ |otherwise = last sorted
+ where
+ possiblePermus = map concatenate $ concat $ map permutations $ concat $ map
+ (\i -> combinations i list )[1..length list]
+ sorted = sort $ filter (\n -> mod n 3 == 0 ) possiblePermus
+
+main :: IO ( )
+main = do
+ putStrLn "Please enter some integers greater than 0 , separated by blanks!"
+ numberstrings <- getLine
+ let numbers = if length numberstrings == 1 then [read numberstrings]
+ else map read $ words numberstrings
+ print $ solution numbers
diff --git a/challenge-245/ulrich-rieke/perl/ch-1.pl b/challenge-245/ulrich-rieke/perl/ch-1.pl new file mode 100755 index 0000000000..eacac696c7 --- /dev/null +++ b/challenge-245/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,20 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+say "Enter some programming languages, separated by blanks!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my @languages = split( /\s/ , $line ) ;
+say "Enter some popularity indices, separated by blanks!" ;
+$line = <STDIN> ;
+chomp $line ;
+my @popularity = split( /\s/ , $line ) ;
+my @pairs ;
+for my $i ( 0..scalar( @languages) - 1 ) {
+ push @pairs , [$popularity[ $i ] , $languages[ $i ]] ;
+}
+my @sorted = sort { $a->[0] <=> $b->[0] } @pairs ;
+print "(" ;
+say join( ',' , map { $_->[1] } @sorted ) . ")"
diff --git a/challenge-245/ulrich-rieke/perl/ch-2.pl b/challenge-245/ulrich-rieke/perl/ch-2.pl new file mode 100755 index 0000000000..e62ff04b4d --- /dev/null +++ b/challenge-245/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,57 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+use Algorithm::Combinatorics qw ( permutations combinations ) ;
+
+sub concatenate {
+ my $numbers = shift ;
+ my $concat ;
+ map { $concat .= $_ } @$numbers ;
+ return $concat ;
+}
+
+say "Enter some numbers greater than 0 , separated by blanks!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my @numbers = split( /\s/ , $line ) ;
+my $iter = permutations( \@numbers ) ;
+my @permuted ;
+while ( my $c = $iter->next ) {
+ push @permuted , concatenate( $c ) ;
+}
+my @selected = grep { $_ % 3 == 0 } @permuted ;
+if ( @selected ) {
+ my @sorted = sort { $b <=> $a } @selected ;
+ say $sorted[ 0 ] ;
+}
+else {
+ my $len = scalar( @numbers ) ;
+ my $i = $len ;
+ my @sorted ;
+ while ( $i != 1 ) {
+ @permuted = ( ) ;
+ $iter = combinations( \@numbers , $i ) ;
+ while ( my $c = $iter->next ) {
+ my @combi = @$c ;
+ my $permuiter = permutations( \@combi ) ;
+ while ( my $permuc = $permuiter->next ) {
+ push @permuted , concatenate( $permuc ) ;
+ }
+ }
+ @selected = grep { $_ % 3 == 0 } @permuted ;
+ if ( @selected ) {
+ @sorted = sort { $b <=> $a } @selected ;
+ last ;
+ }
+ else {
+ $i-- ;
+ }
+ }
+ if ( @selected ) {
+ say $sorted[0] ;
+ }
+ else {
+ say "-1" ;
+ }
+}
diff --git a/challenge-245/ulrich-rieke/raku/ch-1.raku b/challenge-245/ulrich-rieke/raku/ch-1.raku new file mode 100755 index 0000000000..2257e5dc20 --- /dev/null +++ b/challenge-245/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,15 @@ +use v6 ;
+
+say "Enter some computer languages, separated by blanks!" ;
+my $line = $*IN.get ;
+my @languages = $line.words ;
+say "Enter some popularity indices for these languages!" ;
+$line = $*IN.get ;
+my @popularity = $line.words.map( {.Int} ) ;
+my @pairs ;
+for (0..@languages.elems - 1) -> $index {
+ @pairs.push( (@popularity[ $index ] , @languages[ $index ] ) ) ;
+}
+my @sorted = @pairs.sort( { $^a[0] cmp $^b[0] } ) ;
+print "(" ;
+say @sorted.map( {$_[1]} ).join( ',' ) ~ ")" ;
diff --git a/challenge-245/ulrich-rieke/raku/ch-2.raku b/challenge-245/ulrich-rieke/raku/ch-2.raku new file mode 100755 index 0000000000..45b8866774 --- /dev/null +++ b/challenge-245/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,55 @@ +use v6 ;
+#concatenate by gluing the digits together to a string and by converting
+#them to an int afterwards
+sub concatenate( $aSequence ) {
+ my $total ;
+ my $len = $aSequence.elems ;
+ for (0..$len - 1 ) -> $num {
+ $total ~= $aSequence[ $num ].Str ;
+ }
+ return $total.Int ;
+}
+
+say "Enter some integers greater than 0 , separated by blanks!" ;
+my $line = $*IN.get ;
+my @numbers = $line.words.map( {.Int} ) ;
+my @permuted ; #for the concatenated permutations
+my @permutations = @numbers.permutations( ) ;
+for @permutations -> $permu {
+ @permuted.push( concatenate( $permu ) ) ;
+}
+my @selected = @permuted.grep( { $_ %% 3 } ) ;
+if ( @selected.elems > 0 ) {
+ @selected .= sort ; #sort in ascending order
+ say @selected[*-1] ; #and select the largest one
+}
+else {#create combinations of decreasing length and permutate each
+#combination. Stop when a number divisible by 3 has been found
+ my $len = @numbers.elems ;
+ my $i = $len ;
+ @permuted = ( ) ;#clear the array we've used before
+ while ( $i != 1 ) {
+ my @combinations = @numbers.combinations( $i ) ;
+ for @combinations -> $combi {
+ my @permu = $combi.permutations( ) ;
+ for @permu -> $aPermu {
+ my $concat = concatenate( $aPermu ) ;
+ @permuted.push( $concat ) ;
+ }
+ }
+ @selected = @permuted.grep( { $_ %% 3 } ) ;
+ if ( @selected ) {
+ @selected .= sort ;
+ last ;
+ }
+ else {
+ $i-- ;
+ }
+ }
+ if ( @selected ) {
+ say @selected[*-1] ;
+ }
+ else {
+ say "-1" ;
+ }
+}
diff --git a/challenge-245/ulrich-rieke/rust/ch-1.rs b/challenge-245/ulrich-rieke/rust/ch-1.rs new file mode 100755 index 0000000000..6fde09a21b --- /dev/null +++ b/challenge-245/ulrich-rieke/rust/ch-1.rs @@ -0,0 +1,25 @@ +use std::io ; + +fn main() { + println!("Enter some computer languages, separated by blanks!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let entered_line : &str = &*inline ; + let languages : Vec<&str> = entered_line.split_whitespace( ).map( | s | + s.trim( ) ).collect( ) ; + println!("Enter as many popularity indices, separated by blanks!") ; + let mut snd_line : String = String::new( ) ; + io::stdin( ).read_line( &mut snd_line ).unwrap( ) ; + let second_line : &str = &*snd_line ; + let popularity : Vec<u8> = second_line.split_whitespace( ).map( | s | + s.trim( ).parse::<u8>( ).unwrap( ) ).collect( ) ; + let mut contest : Vec<(u8 , &str)> = Vec::new( ) ; + let mut iter = popularity.iter( ).zip(languages.iter( ) ) ; + while let Some( ( &i , &lang ) ) = iter.next( ) { + contest.push( (i , lang ) ) ; + } + contest.sort_by( | a , b | a.0.cmp( &b.0 ) ) ; + print!("(" ) ; + contest.iter( ).for_each( | p | print!("{:?} " , p.1 ) ) ; + println!(")" ) ; +} diff --git a/challenge-245/ulrich-rieke/rust/ch-2.rs b/challenge-245/ulrich-rieke/rust/ch-2.rs new file mode 100755 index 0000000000..8db9155423 --- /dev/null +++ b/challenge-245/ulrich-rieke/rust/ch-2.rs @@ -0,0 +1,45 @@ +use std::io ; +use itertools::Itertools ; + +fn concatenate( nums : Vec<&u32> ) -> u32 { + let mut total : String = String::new( ) ; + for n in nums { + let str : String = (*n).to_string( ) ; + total.push_str( &str ) ; + } + let numberstr : &str = total.as_str( ) ; + numberstr.parse::<u32>().unwrap( ) +} + +fn main() { + println!("Enter some integers greater than 0 , separated by blanks!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let entered_line : &str = &*inline ; + let numbers : Vec<u32> = entered_line.split_whitespace( ).map( | s | + s.trim( ).parse::<u32>( ).unwrap( ) ).collect( ) ; + let len = numbers.len( ) ; + let mut selected : Vec<u32> = Vec::new( ) ; + let mut i : usize = len ; + while i != 1 { + let perms = numbers.iter( ).permutations( i ) ; + let mut permuted : Vec<u32> = Vec::new( ) ; + for vec in perms { + let concat : u32 = concatenate( vec ) ; + permuted.push( concat ) ; + } + permuted.iter( ).filter( | n | *n % 3 == 0 ).for_each( | num | + selected.push( *num ) ) ; + if selected.len( ) > 0 { + selected.sort_by( | a , b | b.cmp( a ) ) ; + break ; + } + i -= 1 ; + } + if selected.len( ) > 0 { + println!("{}" , selected[0] ) ; + } + else { + println!("-1") ; + } +} diff --git a/challenge-245/ziameraj16/java/SortLanguage.java b/challenge-245/ziameraj16/java/SortLanguage.java new file mode 100644 index 0000000000..510c860ec0 --- /dev/null +++ b/challenge-245/ziameraj16/java/SortLanguage.java @@ -0,0 +1,17 @@ +import java.util.*; + +public class SortLanguage { + + public static void main(String[] args) { + final Scanner scanner = new Scanner(System.in); + System.out.println("Enter comma separated languages"); + List<String> languages = Arrays.stream(scanner.nextLine().split(",")).toList(); + System.out.println("Enter comma separated popularity value"); + List<Integer> popularityList = Arrays.stream(scanner.nextLine().split(",")).map(Integer::valueOf).toList(); + List<String> output = new ArrayList<>(popularityList.size()); + for (int i = 1; i <= popularityList.size(); i++) { + output.add(languages.get(popularityList.indexOf(i))); + } + System.out.println(output); + } +} diff --git a/stats/pwc-challenge-244.json b/stats/pwc-challenge-244.json new file mode 100644 index 0000000000..db7719e16c --- /dev/null +++ b/stats/pwc-challenge-244.json @@ -0,0 +1,715 @@ +{ + "drilldown" : { + "series" : [ + { + "id" : "Adam Russell", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 2 + ] + ], + "name" : "Adam Russell" + }, + { + "name" : "Ali Moradi", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Ali Moradi" + }, + { + "id" : "Arne Sommer", + "name" : "Arne Sommer", + "data" : [ + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "id" : "Athanasius", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] + ], + "name" : "Athanasius" + }, + { + "id" : "BarrOff", + "data" : [ + [ + "Perl", + 1 + ], + [ + "Raku", + 2 + ] + ], + "name" : "BarrOff" + }, + { + "id" : "Bob Lied", + "name" : "Bob Lied", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "id" : "Bruce Gray", + "name" : "Bruce Gray", + "data" : [ + [ + "Raku", + 2 + ] + ] + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "name" : "Cheok-Yin Fung", + "id" : "Cheok-Yin Fung" + }, + { + "name" : "Clifton Wood", + "data" : [ + [ + "Raku", + 2 + ] + ], + "id" : "Clifton Wood" + }, + { + "id" : "Dave Jacoby", + "name" : "Dave Jacoby", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "name" : "David Ferrone", + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "David Ferrone" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "name" : "E. Choroba", + "id" : "E. Choroba" + }, + { + "id" : "Humberto Massa", + "name" : "Humberto Massa", + "data" : [ + [ + "Raku", + 2 + ] + ] + }, + { + "name" : "Ian Rifkin", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Ian Rifkin" + }, + { + "id" : "Jaldhar H. Vyas", + "name" : "Jaldhar H. Vyas", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "id" : "Jan Krnavek", + "data" : [ + [ + "Raku", + 2 + ] + ], + "name" : "Jan Krnavek" + }, + { + "name" : "Jorg Sommrey", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Jorg Sommrey" + }, + { + "id" : "Laurent Rosenfeld", + "name" : "Laurent Rosenfeld", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 2 + ] + ] + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ], + "name" : "Lubos Kolouch", + "id" : "Lubos Kolouch" + }, + { + "id" : "Luca Ferrari", + "name" : "Luca Ferrari", + "data" : [ + [ + "Raku", + 2 + ], + [ + "Blog", + 8 + ] + ] + }, + { + "id" : "Mark Anderson", + "name" : "Mark Anderson", + "data" : [ + [ + "Raku", + 2 + ] + ] + }, + { + "id" : "Matthew Neleigh", + "name" : "Matthew Neleigh", + "data" : [ + [ + "Perl", + 2 + ] + ] + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "name" : "Matthias Muth", + "id" : "Matthias Muth" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "name" : "Nelo Tovar", + "id" : "Nelo Tovar" + }, + { + "name" : "Niels van Dijke", + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Niels van Dijke" + }, + { + "id" : "Packy Anderson", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ], + "name" : "Packy Anderson" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "name" : "Paulo Custodio", + "id" : "Paulo Custodio" + }, + { + "id" : "Peter Campbell Smith", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "name" : "Peter Campbell Smith" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + |
