私はプロジェクトオイラーの問題22に取り組んでいます:
names.txt(右クリックして[リンク/ターゲットに名前を付けて保存...])を使用して、5000を超える名を含む46Kテキストファイルをアルファベット順に並べ替えます。次に、各名前のアルファベットの値を計算し、この値にリスト内のアルファベットの位置を掛けて、名前のスコアを取得します。
たとえば、リストをアルファベット順に並べ替えると、3 + 15 + 12 + 9 + 14=53の価値があるCOLINがリストの938番目の名前になります。したがって、COLINは938×53=49714のスコアを取得します。
ファイル内のすべての名前スコアの合計はいくつですか?
http://projecteuler.net/problem=22
以下のコードをコンパイルすると、 871196077という答えが返されます。正解は871198282である必要があります。
インポート時間
def euler_22():
## Creates a sorted list of the names in Py_Euler_22.txt names = open('Py_Euler_22.txt', 'r') names = names.read() names = names.split('","') names[0] = names[0][1:] names[-1] = names[-1][:-2] names = sorted(names) ## Creates a dictionary: letter -> value value_letters = {} start = ord("A") for i in range(0, 26): value_letters[chr(start+i)] = i+1 result = 0 for i in range(1, len(names)+1): name = names[i-1] sum_letters = 0 for letter in name: sum_letters += value_letters[letter]*i # = value of the letter multiplied with the name position result += sum_letters return result
tstart = time.time()print euler_22()print "実行時間:" + str(time.time()-tstart)
同様の解決策でプログラムを見つけようとしましたが、オプションを制限するPythonしか知りません。私は、プログラムなしで答えを得ることができ、それらすべてが機能する、より単純なテキストファイルを使用してプログラムを実行しました。問題の答えをグーグルで検索しましたが、不足している点が見つからないため、それも役に立ちませんでした。
私は初心者なので、問題を正しく解決するのに役立つ、プログラムとPythonに関するヒントだけでなく、それらに関するヒントを本当にいただければ幸いです。
どうもありがとう!