Rosetta Code/Rank languages by popularity: Difference between revisions
(→{{header|Python}}: in my opinion its better to iterate the file than read it all in) |
m (→{{header|Python}}: not sure if need to close) |
||
Line 26: | Line 26: | ||
<python>import urllib |
<python>import urllib |
||
import re |
import re |
||
def key1(x): |
def key1(x): |
||
return int(x.split()[0]) |
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 = [] |
||
Line 37: | Line 37: | ||
match = re.search('>([^<>]*)</a> \((\d+) members?\)', line) |
match = re.search('>([^<>]*)</a> \((\d+) members?\)', line) |
||
if match: entries.append(match.group(2) + ' - ' + match.group(1)) |
if match: entries.append(match.group(2) + ' - ' + match.group(1)) |
||
a.close() |
|||
for c, line in enumerate(sorted(entries, key=key1, reverse=True),start=1): |
for c, line in enumerate(sorted(entries, key=key1, reverse=True),start=1): |
||
print "%3d. %s" % (c, line)</python> |
print "%3d. %s" % (c, line)</python> |
Revision as of 23:08, 24 January 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 categorys (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
Python
Works with: Python 2.6
<python>import urllib import re
def key1(x):
return int(x.split()[0])
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=key1, reverse=True),start=1):
print "%3d. %s" % (c, line)</python>
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