Euler project 22
Problem 22 †
5000個以上の名前が書かれている46Kのテキストファイルnames.txt を用いる. まずアルファベット順にソートせよ.
のち, 各名前についてアルファベットに値を割り振り, リスト中の出現順の数と掛け合わせることで, 名前のスコアを計算する.
たとえば, リストがアルファベット順にソートされているとすると, COLINはリストの938番目にある. またCOLINは3 + 15 + 12 + 9 + 14 = 53という値を持つ. よってCOLINは938 × 53 = 49714というスコアを持つ.
ファイル中の全名前のスコアの合計を求めよ.
import csv import sys import numpy as np total=[] f=open('names.txt','rt') reader=csv.reader(f) data=np.array([row for row in reader]) data=np.sort(data) for i in range(len(data[0])): total.append( sum([ ord(x)-64 for x in data[0][i] ]) * (i+1)) print sum(total)
一行で解いている人がいてまじ白目
stringモジュールを使えばもっと簡単に解けるのか....
ord関数は文字を文字コードに変換する。