Python でやってみた。
cf. Rubyで点数を集計するとき、あなたはどうしてますか? - hp12c
import re class Score: def __init__(self, name, a, b): self.name = name self.a = a self.b = b def total(self): return self.a + self.b data ="""player gameA gameB Bob 20 56 Ross 68 33 Bob 78 55 Kent 90 15 Alice 84 79 Ross 10 15 Jimmy 80 31 Bob 12 36 Kent 88 43 Kent 12 33 Alice 90 32 Ross 67 77 Alice 56 92 Jimmy 33 88 Jimmy 11 87""" a = re.split("\n", data) headers = re.split("\s+", a[0]) values = map((lambda x: re.split("\s+", x)), a[1:]) scores = {} for s in values: player = s[0] if player in scores: scores[player].a += int(s[1]) scores[player].b += int(s[2]) else: scores[player] = Score(player, int(s[1]), int(s[2])) lanking = scores.values() lanking.sort(lambda a,b: cmp(b.total(), a.total())) print "%s\t%s\t%s\ttotal" % tuple(headers) for player in lanking: print "%s\t%d\t%d\t%d" % (player.name, player.a, player.b, player.total())
実行結果:
^o^ > python game_score.py player gameA gameB total Alice 230 203 433 Jimmy 124 206 330 Kent 190 91 281 Ross 145 125 270 Bob 110 147 257