diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-12-10 21:16:13 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-12-10 21:16:13 +0000 |
| commit | f821b9460f215c9ef863c7af2b53bb9be180f4bd (patch) | |
| tree | 44a1bc6b1d1d912e44df4d829c6f0aa75fb34b14 | |
| parent | 507b7f41210179c65270ca418f83ddc67fd56790 (diff) | |
| download | perlweeklychallenge-club-f821b9460f215c9ef863c7af2b53bb9be180f4bd.tar.gz perlweeklychallenge-club-f821b9460f215c9ef863c7af2b53bb9be180f4bd.tar.bz2 perlweeklychallenge-club-f821b9460f215c9ef863c7af2b53bb9be180f4bd.zip | |
- Added solutions by Ulrich Rieke.
24 files changed, 2637 insertions, 2371 deletions
diff --git a/challenge-194/ulrich-rieke/cpp/ch-1.cpp b/challenge-194/ulrich-rieke/cpp/ch-1.cpp new file mode 100644 index 0000000000..806068be6b --- /dev/null +++ b/challenge-194/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,50 @@ +#include <iostream> +#include <string> +#include <vector> +#include <numeric> +#include <algorithm> + +int main( int argc, char * argv[] ) { + if ( argc != 2 ) { + std::cerr << "Usage: <challenge194> <string>!\n" ; + return 1 ; + } + else { + std::string searchStr ( argv[1] ) ; + auto pos = searchStr.find("?" , 0) ; + int i = static_cast<int>( pos ) ; + int digit = 10 ; + std::vector<int> hours( 24 ) ; + std::iota( hours.begin( ) , hours.end( ) , 0 ) ; + std::vector<int> minutes( 60 ) ; + std::iota( minutes.begin( ) , minutes.end( ) , 0 ) ; + int otherDigit = 0 ; + switch (i) { + case 0 : otherDigit = std::stoi( searchStr.substr( i + 1 , 1 ) ) ; + do { + digit-- ; + } while ( std::find( hours.begin( ) , hours.end( ) , digit * 10 + + otherDigit ) == hours.end( ) ) ; break ; + case 1 : otherDigit = std::stoi( searchStr.substr( i - 1 , 1 )) ; + do { + digit-- ; + } while ( std::find( hours.begin( ) , hours.end( ) , otherDigit + * 10 + digit ) == hours.end( ) ) ; break ; + case 3 : otherDigit = std::stoi( searchStr.substr( i + 1 , 1 )) ; + do { + digit-- ; + } while ( std::find( minutes.begin( ) , minutes.end( ) , + digit * 10 + otherDigit ) == minutes.end( ) ) ; + break ; + case 4 : otherDigit = std::stoi( searchStr.substr( i - 1 , 1 )) ; + do { + digit-- ; + } while ( std::find( minutes.begin( ) , minutes.end( ) , + otherDigit * 10 + digit ) == minutes.end( ) ) ; + break ; + default : ; + } + std::cout << digit << std::endl ; + return 0 ; + } +} diff --git a/challenge-194/ulrich-rieke/cpp/ch-2.cpp b/challenge-194/ulrich-rieke/cpp/ch-2.cpp new file mode 100644 index 0000000000..e7163fdfc7 --- /dev/null +++ b/challenge-194/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,36 @@ +#include <iostream> +#include <string> +#include <map> +#include <algorithm> +#include <vector> + +int main( int argc , char * argv[] ) { + if ( argc != 2 ) { + std::cerr << "Please use <challenge194_2> <string>!\n" ; + return 1 ; + } + else { + std::string myString( argv[1] ) ; + std::map<char , int> letterfrequencies ; + for ( char c : myString ) { + letterfrequencies[c]++ ; + } + std::vector<int> frequencies ; + for ( auto p : letterfrequencies ) + frequencies.push_back( p.second ) ; + int maximum = *std::max_element(frequencies.begin( ) , + frequencies.end( ) ) ; + int minimum = *std::min_element( frequencies.begin( ) , + frequencies.end( ) ) ; + int count = 0 ; + for ( auto p : letterfrequencies ) { + if ( p.second == minimum ) + count++ ; + } + if ( maximum == minimum + 1 && count == letterfrequencies.size( ) - 1 ) + std::cout << 1 << std::endl ; + else + std::cout << 0 << std::endl ; + return 0 ; + } +} diff --git a/challenge-194/ulrich-rieke/haskell/ch-1.hs b/challenge-194/ulrich-rieke/haskell/ch-1.hs new file mode 100644 index 0000000000..ad2d9b75fe --- /dev/null +++ b/challenge-194/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,40 @@ +module Challenge194 + where +import Data.Maybe ( fromJust ) +import Data.List ( findIndex , (!!)) +import Data.Char ( digitToInt ) + +validHours :: [Int] +validHours = enumFromTo 0 23 + +validMinutes :: [Int] +validMinutes = enumFromTo 0 59 + +solution :: String -> Int +solution input = case pos of +0 -> until (\d -> elem (digitToInt ( input !! 1 ) + d * 10 ) validHours ) + pred d +1 -> until (\d -> elem (digitToInt ( input !! 0 ) * 10 + d ) validHours ) + pred d +3 -> until (\d -> elem (digitToInt ( input !! 4 ) + d * 10 ) validMinutes ) + pred d +4 -> until (\d -> elem (digitToInt ( input !! 3 ) * 10 + d ) validMinutes ) pred + d +where + d :: Int + d = 9 + pos :: Int + pos = fromJust $ findIndex ( == '?' ) input + +keepAskingForInput :: IO String +keepAskingForInput = do + putStrLn "Enter a time in the form hh:mm, with 1 position replaced by a '?'" + myLine <- getLine + if '?' `elem` myLine then return myLine + else do + keepAskingForInput + +main :: IO ( ) +main = do + theInput <- keepAskingForInput + print $ solution theInput diff --git a/challenge-194/ulrich-rieke/haskell/ch-2.hs b/challenge-194/ulrich-rieke/haskell/ch-2.hs new file mode 100644 index 0000000000..e860cd49dc --- /dev/null +++ b/challenge-194/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,21 @@ +module Challenge194_2 + where +import qualified Data.Set as S + +count :: Eq a => a -> [a] -> Int +count el list = length $ filter ( == el ) list + +solution :: String -> Int +solution input = if maxFrequency == minFrequency + 1 && ((length $ filter (\c +-> count c input == minFrequency ) uniqueLetters) == l - 1 ) then 1 else 0 +where + l :: Int + l = length uniqueLetters + uniqueLetters :: [Char] + uniqueLetters = S.toList $ S.fromList input + frequencies :: [Int] + frequencies = map (\c -> count c input ) uniqueLetters + maxFrequency :: Int + maxFrequency = maximum frequencies + minFrequency :: Int + minFrequency = minimum frequencies diff --git a/challenge-194/ulrich-rieke/perl/ch-1.pl b/challenge-194/ulrich-rieke/perl/ch-1.pl new file mode 100644 index 0000000000..865e3e25e0 --- /dev/null +++ b/challenge-194/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,18 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; + +say "Enter a time in the form hh:mm, with one position replaced by a '?'!" ; +my $time = <STDIN> ; +chomp $time ; +my $pos = index( $time , '?' ) ; +my $digit = 10 ; +while ( $time !~ /^(0[0-9] |1[0-9]|2[0-3]):[0-5][0-9]$/ ) { + $digit-- ; + if ( $time !~ /\?/ ) { + substr( $time, $pos , 1 ) = '?' ; + } + $time =~ s/\?/$digit/ ; +} +say $digit ; diff --git a/challenge-194/ulrich-rieke/perl/ch-2.pl b/challenge-194/ulrich-rieke/perl/ch-2.pl new file mode 100644 index 0000000000..401cce6c8e --- /dev/null +++ b/challenge-194/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,22 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; +use List::Util qw ( max min ) ; + +my $input = $ARGV[ 0 ] ; +my %letterfrequencies ; +for my $letter ( split( //, $input )) { + $letterfrequencies{ $letter }++ ; +} +my $maximum = max( values %letterfrequencies ) ; +my $minimum = min( values %letterfrequencies ) ; +my @selected = grep { $letterfrequencies{$_} == $minimum } keys +%letterfrequencies ; +if ( $maximum == $minimum + 1 && scalar( @selected ) == ( scalar( keys + %letterfrequencies ) - 1 )) { + say 1 ; +} +else { + say 0 ; +} diff --git a/challenge-194/ulrich-rieke/raku/ch-1.raku b/challenge-194/ulrich-rieke/raku/ch-1.raku new file mode 100644 index 0000000000..1a30a00ee8 --- /dev/null +++ b/challenge-194/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,17 @@ +use v6 ; + +say "Enter a time in the format hh::mm , with one missing digit replaced by '?'!" ; +my $time = $*IN.get ; +my $hour_regex = / 0 <[0..9]> || 1 <[0..9]> || 2 <[0..3]> / ; +my $minutes_regex = /<[0..5]> <[0..9]>/ ; +my $pos = $time.index( '?' ) ; +my $digit = 10 ; +repeat { + $digit-- ; + if ( $time !~~ /'?'/ ) { #we keep looking for '?', so we must re-insert it + #if there was no valid match + $time.substr-rw( $pos , 1 ) = '?' ; + } + $time ~~ s/'?'/$digit/ ; +} until ( $time ~~ /^<$hour_regex> ':' <$minutes_regex> $/ ) ; +say $digit ; diff --git a/challenge-194/ulrich-rieke/raku/ch-2.raku b/challenge-194/ulrich-rieke/raku/ch-2.raku new file mode 100644 index 0000000000..fa6b919bdf --- /dev/null +++ b/challenge-194/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,18 @@ +use v6 ; + +sub MAIN( Str $input ) { + my %letterfrequencies ; + for $input.comb -> $l { + %letterfrequencies{$l}++ ; + } + my $maximum = %letterfrequencies.values.max ; + my $minimum = %letterfrequencies.values.min ; + if ( $maximum == $minimum + 1 && %letterfrequencies.keys.grep( { + %letterfrequencies{ $_ } == $minimum } ).elems == + %letterfrequencies.keys.elems - 1 ) { + say 1 ; + } + else { + say 0 ; + } +} diff --git a/challenge-194/ulrich-rieke/rust/ch-2.rs b/challenge-194/ulrich-rieke/rust/ch-2.rs new file mode 100644 index 0000000000..dba21375a9 --- /dev/null +++ b/challenge-194/ulrich-rieke/rust/ch-2.rs @@ -0,0 +1,25 @@ +use std::io ; +use std::collections::HashMap ; + +fn main() { + println!("Please enter a string consisting of lowercase letters!") ; + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( & mut inline ).unwrap( ) ; + let entered_line : &str = &*inline ; + let mut frequencies = HashMap::new( ) ; + for c in entered_line.trim( ).chars( ) { + let counter = frequencies.entry( c ).or_insert( 0 ) ; + *counter += 1 ; + } + let maximum = frequencies.values( ).max( ).unwrap( ) ; + let minimum = frequencies.values( ).min( ).unwrap( ) ; + let letter_count = frequencies.iter( ).count( ) ; + let howmany = frequencies.iter( ).filter( |( _ , a )| **a == *minimum) + .count( ) ; + if *maximum == *minimum + 1 && howmany == letter_count - 1 { + println!("1") ; + } + else { + println!("0") ; + } +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 48855b7a2a..871fcfbf3c 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,4 +1,16 @@ { + "legend" : { + "enabled" : 0 + }, + "xAxis" : { + "type" : "category" + }, + "subtitle" : { + "text" : "[Champions: 23] Last updated at 2022-12-10 19:20:41 GMT" + }, + "title" : { + "text" : "The Weekly Challenge - 194" + }, "plotOptions" : { "series" : { "borderWidth" : 0, @@ -8,157 +20,26 @@ } } }, - "title" : { - "text" : "The Weekly Challenge - 194" - }, - "series" : [ - { - "name" : "The Weekly Challenge - 194", - "colorByPoint" : 1, - "data" : [ - { - "drilldown" : "Alexander Pankoff", - "name" : "Alexander Pankoff", - "y" : 2 - }, - { - "y" : 4, - "name" : "Athanasius", - "drilldown" : "Athanasius" - }, - { - "name" : "Dave Jacoby", - "drilldown" : "Dave Jacoby", - "y" : 2 - }, - { - "y" : 2, - "drilldown" : "David Ferrone", - "name" : "David Ferrone" - }, - { - "y" : 2, - "drilldown" : "E. Choroba", - "name" : "E. Choroba" - }, - { - "y" : 2, - "drilldown" : "Feng Chang", - "name" : "Feng Chang" - }, - { - "y" : 6, - "name" : "Flavio Poletti", - "drilldown" : "Flavio Poletti" - }, - { - "drilldown" : "James Smith", - "name" : "James Smith", - "y" : 3 - }, - { - "drilldown" : "Jorg Sommrey", - "name" : "Jorg Sommrey", - "y" : 2 - }, - { - "name" : "Laurent Rosenfeld", - "drilldown" : "Laurent Rosenfeld", - "y" : 5 - }, - { - "name" : "Luca Ferrari", - "drilldown" : "Luca Ferrari", - "y" : 8 - }, - { - "drilldown" : "Mark Anderson", - "name" : "Mark Anderson", - "y" : 2 - }, - { - "name" : "Niels van Dijke", - "drilldown" : "Niels van Dijke", - "y" : 2 - }, - { - "drilldown" : "Peter Campbell Smith", - "name" : "Peter Campbell Smith", - "y" : 3 - }, - { - "y" : 2, - "name" : "Robbie Hatley", - "drilldown" : "Robbie Hatley" - }, - { - "y" : 4, - "name" : "Robert DiCicco", - "drilldown" : "Robert DiCicco" - }, - { - "drilldown" : "Robert Ransbottom", - "name" : "Robert Ransbottom", - "y" : 2 - }, - { - "drilldown" : "Roger Bell_West", - "name" : "Roger Bell_West", - "y" : 4 - }, - { - "name" : "Stephen G. Lynn", - "drilldown" : "Stephen G. Lynn", - "y" : 5 - }, - { - "y" : 2, - "drilldown" : "Thomas Kohler", - "name" : "Thomas Kohler" - }, - { - "y" : 2, - "name" : "Vamsi Meenavilli", - "drilldown" : "Vamsi Meenavilli" - }, - { - "y" : 3, - "drilldown" : "W. Luis Mochan", - "name" : "W. Luis Mochan" - } - ] - } - ], "tooltip" : { "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/>", "followPointer" : 1 }, - "chart" : { - "type" : "column" - }, - "subtitle" : { - "text" : "[Champions: 22] Last updated at 2022-12-10 18:57:49 GMT" - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, "drilldown" : { "series" : [ { + "name" : "Alexander Pankoff", + "id" : "Alexander Pankoff", "data" : [ [ "Perl", 2 ] - ], - "id" : "Alexander Pankoff", - "name" : "Alexander Pankoff" + ] }, { "id" : "Athanasius", + "name" : "Athanasius", "data" : [ [ "Perl", @@ -168,50 +49,51 @@ "Raku", 2 ] - ], - "name" : "Athanasius" + ] }, { - "id" : "Dave Jacoby", "data" : [ [ "Perl", 2 ] ], + "id" : "Dave Jacoby", "name" : "Dave Jacoby" }, { - "id" : "David Ferrone", "data" : [ [ "Perl", 2 ] ], + "id" : "David Ferrone", "name" : "David Ferrone" }, { + "name" : "E. Choroba", "id" : "E. Choroba", "data" : [ [ "Perl", 2 ] - ], - "name" : "E. Choroba" + ] }, { - "name" : "Feng Chang", "data" : [ [ "Raku", 2 ] ], - "id" : "Feng Chang" + "id" : "Feng Chang", + "name" : "Feng Chang" }, { + "name" : "Flavio Poletti", + "id" : "Flavio Poletti", "data" : [ [ "Perl", @@ -225,13 +107,9 @@ "Blog", 2 ] - ], - "id" : "Flavio Poletti", - "name" : "Flavio Poletti" + ] }, { - "name" : "James Smith", - "id" : "James Smith", "data" : [ [ "Perl", @@ -241,7 +119,9 @@ "Blog", 1 ] - ] + ], + "id" : "James Smith", + "name" : "James Smith" }, { "data" : [ @@ -250,11 +130,12 @@ 2 ] ], - "id" : "Jorg Sommrey", - "name" : "Jorg Sommrey" + "name" : "Jorg Sommrey", + "id" : "Jorg Sommrey" }, { "name" : "Laurent Rosenfeld", + "id" : "Laurent Rosenfeld", "data" : [ [ "Perl", @@ -268,8 +149,7 @@ "Blog", 1 ] - ], - "id" : "Laurent Rosenfeld" + ] }, { "name" : "Luca Ferrari", @@ -286,26 +166,28 @@ ] }, { - "id" : "Mark Anderson", "data" : [ [ "Raku", 2 ] ], + "id" : "Mark Anderson", "name" : "Mark Anderson" }, { + "name" : "Niels van Dijke", + "id" : "Niels van Dijke", "data" : [ [ "Perl", 2 ] - ], - "id" : "Niels van Dijke", - "name" : "Niels van Dijke" + ] }, { + "id" : "Peter Campbell Smith", + "name" : "Peter Campbell Smith", "data" : [ [ "Perl", @@ -315,22 +197,19 @@ "Blog", 1 ] - ], - "id" : "Peter Campbell Smith", - "name" : "Peter Campbell Smith" + ] }, { + "id" : "Robbie Hatley", + "name" : "Robbie Hatley", "data" : [ [ "Perl", 2 ] - ], - "id" : "Robbie Hatley", - "name" : "Robbie Hatley" + ] }, { - "name" : "Robert DiCicco", "data" : [ [ "Perl", @@ -341,20 +220,20 @@ 2 ] ], + "name" : "Robert DiCicco", "id" : "Robert DiCicco" }, { + "name" : "Robert Ransbottom", "id" : "Robert Ransbottom", "data" : [ [ "Raku", 2 ] - ], - "name" : "Robert Ransbottom" + ] }, { - "id" : "Roger Bell_West", "data" : [ [ "Perl", @@ -365,11 +244,12 @@ 2 ] ], + "id" : "Roger Bell_West", "name" : "Roger Bell_West" }, { - "name" : "Stephen G. Lynn", "id" : "Stephen G. Lynn", + "name" : "Stephen G. Lynn", "data" : [ [ "Perl", @@ -386,8 +266,8 @@ ] }, { - "name" : "Thomas Kohler", "id" : "Thomas Kohler", + "name" : "Thomas Kohler", "data" : [ [ "Perl", @@ -396,17 +276,30 @@ ] }, { - "name" : "Vamsi Meenavilli", + "id" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] + ] + }, + { "data" : [ [ "Perl", 2 ] ], - "id" : "Vamsi Meenavilli" + "id" : "Vamsi Meenavilli", + "name" : "Vamsi Meenavilli" }, { - "name" : "W. Luis Mochan", "data" : [ [ "Perl", @@ -417,14 +310,140 @@ 1 ] ], + "name" : "W. Luis Mochan", "id" : "W. Luis Mochan" } ] }, - "legend" : { - "enabled" : 0 + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } }, - "xAxis" : { - "type" : "category" - } + "chart" : { + "type" : "column" + }, + "series" : [ + { + "name" : "The Weekly Challenge - 194", + "colorByPoint" : 1, + "data" : [ + { + "name" : "Alexander Pankoff", + "y" : 2, + "drilldown" : "Alexander Pankoff" + }, + { + "drilldown" : "Athanasius", + "y" : 4, + "name" : "Athanasius" + }, + { + "drilldown" : "Dave Jacoby", + "name" : "Dave Jacoby", + "y" : 2 + }, + { + "name" : "David Ferrone", + "y" : 2, + "drilldown" : "David Ferrone" + }, + { + "y" : 2, + "name" : "E. Choroba", + "drilldown" : "E. Choroba" + }, + { + "name" : "Feng Chang", + "y" : 2, + "drilldown" : "Feng Chang" + }, + { + "drilldown" : "Flavio Poletti", + "y" : 6, + "name" : "Flavio Poletti" + }, + { + "y" : 3, + "name" : "James Smith", + "drilldown" : "James Smith" + }, + { + "drilldown" : "Jorg Sommrey", + "y" : 2, + "name" : "Jorg Sommrey" + }, + { + "drilldown" : "Laurent Rosenfeld", + "name" : "Laurent Rosenfeld", + "y" : 5 + }, + { + "drilldown" : "Luca Ferrari", + "y" : 8, + "name" : "Luca Ferrari" + }, + { + "y" : 2, + "name" : "Mark Anderson", + "drilldown" : "Mark Anderson" + }, + { + "drilldown" : "Niels van Dijke", + "y" : 2, + "name" : "Niels van Dijke" + }, + { + "drilldown" : "Peter Campbell Smith", + "name" : "Peter Campbell Smith", + "y" : 3 + }, + { + "drilldown" : "Robbie Hatley", + "name" : "Robbie Hatley", + "y" : 2 + }, + { + "drilldown" : "Robert DiCicco", + "y" : 4, + "name" : "Robert DiCicco" + }, + { + "name" : "Robert Ransbottom", + "y" : 2, + "drilldown" : "Robert Ransbottom" + }, + { + "y" : 4, + "name" : "Roger Bell_West", + "drilldown" : "Roger Bell_West" + }, + { + "name" : "Stephen G. Lynn", + "y" : 5, + "drilldown" : "Stephen G. Lynn" + }, + { + "y" : 2, + "name" : "Thomas Kohler", + "drilldown" : "Thomas Kohler" + }, + { + "drilldown" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "y" : 4 + }, + { + "drilldown" : "Vamsi Meenavilli", + "y" : 2, + "name" : "Vamsi Meenavilli" + }, + { + "drilldown" : "W. Luis Mochan", + "name" : "W. Luis Mochan", + "y" : 3 + } + ] + } + ] } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index a067a11cd3..327d9bb4e5 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,12 +1,49 @@ { - "title" : { - "text" : "The Weekly Challenge Contributions [2019 - 2022]" + "legend" : { + "enabled" : "false" }, "tooltip" : { "pointFormat" : "<b>{point.y:.0f}</b>" }, + "yAxis" : { + "min" : 0, + "title" : { + "text" : null + } + }, + "xAxis" : { + "labels" : { + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + } + }, + "type" : "category" + }, + "chart" : { + "type" : "column" + }, + "subtitle" : { + "text" : "Last updated at 2022-12-10 19:20:41 GMT" + }, + "title" : { + "text" : "The Weekly Challenge Contributions [2019 - 2022]" + }, "series" : [ { + "dataLabels" : { + "enabled" : "true", + "color" : "#FFFFFF", + "style" : { + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" + }, + "y" : 10, + "align" : "right", + "format" : "{point.y:.0f}", + "rotation" : -90 + }, + "name" : "Contributions", "data" : [ [ "Blog", @@ -14,50 +51,13 @@ ], [ "Perl", - 9522 + 9524 ], |
