Rosetta Code/Rank languages by popularity: Difference between revisions
Content added Content deleted
(added oo solution) |
|||
Line 5: | Line 5: | ||
<pre> |
<pre> |
||
1. |
1. 233 - Python |
||
2. |
2. 222 - Ada |
||
3. |
3. 203 - OCaml |
||
4. |
4. 203 - C |
||
5. |
5. 201 - Perl |
||
6. |
6. 193 - Haskell |
||
7. |
7. 182 - Java |
||
8. |
8. 179 - D |
||
9. |
9. 178 - ALGOL 68 |
||
10. |
10. 160 - Ruby |
||
... |
... |
||
</pre> |
</pre> |
||
Line 107: | Line 107: | ||
Counts.Reverse_Iterate (Display'Access); |
Counts.Reverse_Iterate (Display'Access); |
||
end Test;</lang> |
end Test;</lang> |
||
=={{header|ALGOL 68}}== |
|||
<!-- {{does not work with|ALGOL 68|Standard - extensions to language used}} --> |
|||
{{works with|ALGOL 68G|Any - tested with release mk15-0.8b.fc9.i386 - uses non-standard library routines ''get directory'' and'' grep in string''.}} |
|||
<!-- {{does not work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386 - ''get directory'' and'' grep in string'' not available in any library ... yet}} --> |
|||
<lang algol> |
|||
<!-- # the ''good page'' routine was extracted from ALGOL 68G's manual (GPL code) # --> |
|||
PROC good page = (REF STRING page) BOOL: |
|||
IF grep in string("^HTTP/[0-9.]* 200", page, NIL, NIL) = 0 |
|||
THEN TRUE |
|||
ELSE IF INT start, end; |
|||
grep in string("^HTTP/[0-9.]* [0-9]+ [a-zA-Z ]*", page, |
|||
start, end) = 0 |
|||
THEN print (page[start : end]) |
|||
ELSE print ("unknown error retrieving page") |
|||
FI; |
|||
FALSE |
|||
FI; |
|||
OP +:= = (REF FLEX[]STRING in out, STRING item)VOID:( |
|||
[LWB in out: UPB in out+1]STRING new; |
|||
new[LWB in out: UPB in out]:=in out; |
|||
new[UPB new]:=item; |
|||
in out := new |
|||
); |
|||
INT match=0, no match=1, out of memory error=2, other error=3; |
|||
PROC re split = (STRING re split, REF STRING beetles)[]STRING:( |
|||
FLEX[0]STRING out; |
|||
INT start := 1, pos, end; |
|||
WHILE grep in string(re split, beetles[start:], pos, end) = match DO |
|||
out +:= STRING(beetles[start:start+pos-2]); |
|||
out +:= STRING(beetles[start+pos-1:start+end-1]); |
|||
start +:= end |
|||
OD; |
|||
IF start > UPB beetles THEN |
|||
out +:= STRING(beetles[start:]) |
|||
FI; |
|||
out |
|||
); |
|||
IF STRING reply; |
|||
INT rc = |
|||
http content (reply, "www.rosettacode.org", "http://www.rosettacode.org/w/index.php?title=Special:Categories&limit=500", 0); |
|||
rc /= 0 OR NOT good page (reply) |
|||
THEN print (("Error:",strerror (rc))) |
|||
ELSE |
|||
STRING # hack: HTML should be parsed by an official HTML parsing library # |
|||
re html tag = "<[^>]*>", |
|||
re a href category = "^<a href=""/wiki/Category:.*"" title=", |
|||
re members = "([1-9][0-9]* members)"; |
|||
CO |
|||
STRING reply, line; |
|||
reply:=""; |
|||
on logical file end(stand in, (REF FILE f)BOOL: done); |
|||
DO |
|||
read((line, new line)); |
|||
reply +:= line |
|||
OD; done: |
|||
END CO |
|||
BEGIN |
|||
MODE STATISTIC = STRUCT(INT members, STRING category); |
|||
FLEX[0]STATISTIC stats; |
|||
OP +:= = (REF FLEX[]STATISTIC in out, STATISTIC item)VOID:( |
|||
[LWB in out: UPB in out+1]STATISTIC new; |
|||
new[LWB in out: UPB in out]:=in out; |
|||
new[UPB new]:=item; |
|||
in out := new |
|||
); |
|||
# hack: needs to be manually maintained # |
|||
STRING re ignore ="Programming Tasks|WikiStubs|Maintenance/OmitCategoriesCreated|"+ |
|||
"Unimplemented tasks by language|Programming Languages|"+ |
|||
"Solutions by Programming Language|Implementations|"+ |
|||
"Solutions by Library|Encyclopedia|Language users|"+ |
|||
"Solutions by Programming Task|Basic language learning|"+ |
|||
"RCTemplates|Language Implementations"; |
|||
FORMAT category fmt = $"<a href=""/wiki/Category:"g""" title=""Category:"g""""$; |
|||
STRING encoded category, category; |
|||
FORMAT members fmt = $" ("g" members)"$; |
|||
INT members; |
|||
FLEX[0]STRING tokens := re split(re html tag, reply); |
|||
FOR token index TO UPB tokens DO |
|||
STRING token := tokens[token index]; |
|||
FILE file; |
|||
IF grep in string(re a href category, token, NIL, NIL) = match THEN |
|||
associate(file, token); |
|||
make term(file,""""); |
|||
getf(file, (category fmt, encoded category, category)); |
|||
close(file) |
|||
ELIF grep in string(re members, token, NIL, NIL) = match THEN |
|||
IF grep in string(re ignore, category, NIL, NIL) /= match THEN |
|||
associate(file, token); |
|||
getf(file, (members fmt, members)); |
|||
stats +:= STATISTIC(members, category); |
|||
close(file) |
|||
FI |
|||
FI |
|||
OD; |
|||
MODE TYPE = STATISTIC; |
|||
OP < = (STATISTIC a,b)BOOL: |
|||
members OF a < members OF b; |
|||
# hack: boiler plating - sort should be included from a library # |
|||
PROC in place shell sort reverse = (REF FLEX []TYPE seq)REF[]TYPE:( |
|||
INT inc := ( UPB seq + LWB seq + 1 ) OVER 2; |
|||
WHILE inc NE 0 DO |
|||
FOR index FROM LWB seq TO UPB seq DO |
|||
INT i := index; |
|||
TYPE el = seq[i]; |
|||
WHILE ( i - LWB seq >= inc | seq[i - inc] < el | FALSE ) DO |
|||
seq[i] := seq[i - inc]; |
|||
i -:= inc |
|||
OD; |
|||
seq[i] := el |
|||
OD; |
|||
inc := IF inc = 2 THEN 1 ELSE ENTIER(inc * 5 / 11) FI |
|||
OD; |
|||
seq |
|||
); |
|||
stats := in place shell sort reverse(stats); |
|||
INT max = 10; |
|||
FOR i TO (UPB stats > max | max | UPB stats) DO |
|||
printf(($g(-0)". "g(-0)" - "gl$,i,stats[i])) |
|||
OD |
|||
END |
|||
FI</lang> |
|||
Output: |
|||
<pre> |
|||
1. 233 - Python |
|||
2. 222 - Ada |
|||
3. 203 - OCaml |
|||
4. 203 - C |
|||
5. 201 - Perl |
|||
6. 193 - Haskell |
|||
7. 182 - Java |
|||
8. 179 - D |
|||
9. 178 - ALGOL 68 |
|||
10. 160 - Ruby |
|||
</pre> |
|||
=={{header|C sharp|C#}}== |
=={{header|C sharp|C#}}== |
||
Sorting only programming languages. |
Sorting only programming languages. |