2016年10月31日月曜日

名前のスコア

Project Euler 22

46kバイトの5000以上のファーストネームが書かれたnames.txt(右クリックで「名前を付けてリンク先を保存」を選択)に対して、まず、アルファベット順にソートする。
次に各名前に対してアルファベット値を振り出し、リスト上の該当名の位置順と掛け合わせる。

例えば、COLIN のアルファベット値は $3 + 15 + 12 + 9 + 14 = 53$ であるが、ソートされたリスト上での当該名は 938 番目である。よって、COLIN のストアは、$938\times53 = 49714$ である。

ファイル内のすべての名前のスコアの合計値を算出せよ


CSVファイルであるため csvモジュールを利用してもよいが、高々1行のファイルに不向きなように思える。
そこで " 記号を削除したのち、, 記号で分割した。
import time
FILENAME = "p022_names.txt"

start = time.clock()
s = ctr = 0
with open(FILENAME, "r") as fo:
    for x in sorted(fo.readline().replace('"', '').split(",")):
        ctr += 1
        for c in x:
            s += ctr * (ord(c) - ord('A') + 1)
print(s)
print("processing time : ", time.clock() - start)

0 件のコメント:

コメントを投稿