Olympics weighted medal count scoringΒΆ


Well, you know the every-4-year buzz about Olympics scoring.

This year, for example some sites score based on the total amount of medals which makes USA win. Well this scoring is a bit dumb, because gold is harder to achieve than 2 bronze for example.

Now, most other sites base the score on the number of gold medals which makes China win.

Equally dumb and short-sightted, if you ask me.

This also has some bad effects on the Olympics. Countries, which usually sponsor their athletes, want to win Gold, so that they have a good country-ranking in tables.

Thus, people which could qualify for bronze or silver, or simply participate do not get any of this and usually simply aren’t getting to participate, since, only Gold matters.

This is completely against what the Olympics were first created for, of course. Now this is a free world, and this scoring will always be there. According to some article I’ve found, the IOC (International Olympic Comitee) doesn’t endorse any kind of ranking. They also note that in 1908, weighted scoring was used by abandonned...

Weights were

  • Gold: 5
  • Silver: 3
  • Bronze: 1

Anyway, as far as ranking goes, that’s the most fair ranking there is, so today’s 2008 results with:

  • Gold: 3
  • Silver:2
  • Bronze:1

Because if you are completely objective, Gold is only better than Silver and Silver then bronze. Not X times better. One Silver isnt three Bronze and one Gold five Bronze ! Gold simply means the guy did better than the Silver guy. Maybe by 0.0001 second, maybe by 5 seconds, makes no difference.)

Country Score
1 China 144
2 United States 124
3 Australia 65
4 Russia 57
5 Great Britain 55
6 South Korea 47
7 Germany 46
8 France 43
9 Japan 41
10 Italy 36

Doesn’t that look more fair? Does to me. Script to generate this:

from BeautifulSoup import BeautifulSoup
import urllib2, operator

weight = {'gold': 3, 'silver': 2, 'bronze': 1}

page = urllib2.urlopen("http://www.mapsofworld.com/olympic-trivia/olympic-games-results/medals-by-country.html")
soup = BeautifulSoup(page)
table = soup.findAll('table')[12]

medals = {}
for tr in table.findAll('tr'):
        td = tr.findAll('td')
        if td == None: continue
        if len(td) < 4: continue
        if td[0].string == None: continue
        medals[td[0].string] = [int(td[1].string), int(td[2].string), int(td[3].string)]

score = []
for i in medals:
        c = medals[i]
        score.append([i, (c[0]*weight['gold'])+(c[1]*weight['silver'])+(c[2]*weight['bronze'])])


print "Country\t\t\t\tScore"
print "---"
for i in score:
        p1 = str(x) + " - " + i[0].__str__()
        if len(p1) > 23:
                tab = "\t"
        elif len(p1) > 15:
                tab = "\t\t"
        elif len(p1) > 7:
        print p1+tab+str(i[1])