A little of coordination for Rosettacode
bearophile
bearophileHUGS at lycos.com
Thu Jul 25 15:04:40 PDT 2013
> This D entry uses Tango, but it should also show a version for
> Phobos:
>
> http://rosettacode.org/wiki/Rosetta_Code/Count_examples#D
Two versions
The Mathematica solution is short:
TaskList = Flatten[
Import["http://rosettacode.org/wiki/Category:Programming_Tasks",
"Data"][[1, 1]]];
Print["Task \"", StringReplace[#, "_" -> " "], "\" has ",
Length at Select[Import["http://rosettacode.org/wiki/" <> #,
"Data"][[1,2]],
StringFreeQ[#, __ ~~ "Programming Task" | __ ~~ "Omit"]& ], "
example(s)"]&
~Map~ StringReplace[TaskList, " " -> "_"]
This Perl solution is compact:
use v5.10;
use Mojo::UserAgent;
my $site = "http://rosettacode.org";
my $list_url =
"/mw/api.php?action=query&list=categorymembers&cmtitle=Category:Programming_Tasks&cmlimit=500&format=xml";
my $ua = Mojo::UserAgent->new;
$ua->get("$site$list_url")->res->dom->find('cm')->each(sub {
(my $slug = $_->{title}) =~ tr/ /_/;
my $count =
$ua->get("$site/wiki/$slug")->res->dom->find("#toc
.toclevel-1")->size;
say "$_->{title}: $count examples";
});
The F# solution performs downloads concurrently and it's said to
be fast:
#r "System.Xml.Linq.dll"
let uri1 =
"http://www.rosettacode.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Programming_Tasks&cmlimit=500&format=xml"
let uri2 task = sprintf
"http://www.rosettacode.org/w/index.php?title=%s&action=raw" task
[|for xml in (System.Xml.Linq.XDocument.Load
uri1).Root.Descendants() do
for attrib in xml.Attributes() do
if attrib.Name.LocalName = "title" then
yield async {
let uri = uri2 (attrib.Value.Replace(" ", "_") |>
System.Web.HttpUtility.UrlEncode)
use client = new System.Net.WebClient()
let! html = client.AsyncDownloadString(System.Uri uri)
let sols' = html.Split([|"{{header|"|],
System.StringSplitOptions.None).Length - 1
lock stdout (fun () -> printfn "%s: %d examples"
attrib.Value sols')
return sols' }|]
|> Async.Parallel
|> Async.RunSynchronously
|> fun xs -> printfn "Total: %d examples" (Seq.sum xs)
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list