Rosetta Code/Rank languages by popularity: Difference between revisions
Line 47: | Line 47: | ||
<lang python>import urllib, re |
<lang python>import urllib, re |
||
def key1(x): |
|||
return int(x.split()[0]) |
|||
a = urllib.urlopen("http://www.rosettacode.org/w/index.php?title=Special:Categories&limit=500") |
a = urllib.urlopen("http://www.rosettacode.org/w/index.php?title=Special:Categories&limit=500") |
||
entries = [] |
entries = [] |
||
for line in a: |
for line in a: |
||
match = re.search('>([^<>]*)</a> \((\d+) members?\)', line) |
match = re.search('>([^<>]*)</a> \((\d+) members?\)', line) |
||
Line 62: | Line 58: | ||
a.close() |
a.close() |
||
for c, line in enumerate(sorted(entries, key= |
for c, line in enumerate(sorted(entries, key=lambda x: int(x.split()[0]), reverse=True), start=1): |
||
print "%3d. %s" % (c, line)</lang> |
print "%3d. %s" % (c, line)</lang> |
||
Revision as of 12:26, 20 February 2009
You are encouraged to solve this task according to the task description, using any language you may know.
Sort most popular programming languages based in number of members in Rosetta Code categories (from http://www.rosettacode.org/w/index.php?title=Special:Categories&limit=500)
Output:
1. 246 - Programming_Tasks 2. 203 - Python 3. 201 - Ada 4. 188 - OCaml 5. 171 - Perl 6. 169 - Java 7. 168 - Haskell 8. 157 - C 9. 141 - Forth 10. 140 - Ruby ...
Filtering wrong results is optional. You can check against http://www.rosettacode.org/wiki/Special:MostLinkedCategories
Perl
This program checks the name of each category against this page so that only actual languages appear in the ranking.
<lang perl>use LWP::Simple 'get';
my $langs_url = 'http://www.rosettacode.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Programming_Languages&cmlimit=500&format=json'; my $cats_url = 'http://www.rosettacode.org/w/index.php?title=Special:Categories&limit=500';
my %langs = map {/Category:(.+)/, 1}
get($langs_url) =~ /"title":"(.+?)"}/g;
get($cats_url) =~ m{
- (.+?)
}s;
my @pairs =
sort {$b->[1] <=> $a->[1]} grep {$langs{ $_->[0] }} map {[ m{>(\S.*?)</a> \((\d+) member} ]}
split '
Python
Works with: Python 2.6
<lang python>import urllib, re
a = urllib.urlopen("http://www.rosettacode.org/w/index.php?title=Special:Categories&limit=500")
entries = [] for line in a:
match = re.search('>([^<>]*)</a> \((\d+) members?\)', line) if match: entries.append(match.group(2) + ' - ' + match.group(1))
a.close()
for c, line in enumerate(sorted(entries, key=lambda x: int(x.split()[0]), reverse=True), start=1):
print "%3d. %s" % (c, line)</lang>
Ruby
<lang ruby>require 'open-uri'
entries = []
open("http://www.rosettacode.org/w/index.php?title=Special:Categories&limit=500") do |f|
for line in f match = line.match(%r{>([^<>]*)</a> \((\d+) members?\)}) entries << match[2] + ' - ' + match[1] if match end
end
entries.sort_by {|x| -x.to_i}.each_with_index do |line, c|
puts "%3d. %s" % [c+1, line]
end</lang>
UnixPipes
echo "GET http://www.rosettacode.org/w/index.php?title=Special:Categories&limit=500 HTTP/1.0\n\n" | nc www.rosettacode.org 80 | sed -n -e 's,<[^>]*>,,g' -e's,^\([^(]*\)(\([^)]*\) members*) *,\2 - \1,g' -e'/^[0-9]\+./p' | sort -rn