2017-08-06 4 views
1

プロジェクトオイラー番号22のコードは、この例の正しいawnserを返しますが、主な問題の場合は871323337を返します。コードは例を渡しますが、正しい出力は得られません(プロジェクトオイラー番号22)

names.txt(右クリックし、[名前を付けてリンクを保存])を使用すると、名前が五千を超える46Kテキストファイルがアルファベット順にソートされます。次に、各名前のアルファベットの値を計算し、この値にリストのアルファベット順の位置を掛けて、名前スコアを取得します。 たとえば、リストがアルファベット順にソートされている場合、3 + 15 + 12 + 9 + 14 = 53のCOLINはリストの938番目の名前です。したがって、COLINは938×53 = 49714というスコアを取得します。 ファイル内のすべての名前スコアの合計はいくらですか?次のコードは動作します

y=[] 
for a in range(1,len(x)+1): 
    s="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" 
    for b in x: 
     if b<s: 
      s=b 
    y.append(s) 
    x.remove(s) 
def letter_to_int(letter): 
    return int(ord(letter)-64) 
def sum_in_string(s): 
    t=0 
    for i in s: 
     if i=='!': 
      break 
     t=t+letter_to_int(i) 
    return t+60 
t=0 
for i in range(0,len(y)): 
    t=t+sum_in_string(y[i])*(i+1) 
print(t) 
+0

あなたに何を伝えたいですか? –

+0

@BillBell私のコードに何が間違っているか教えてください。 –

+0

私はネイトが彼の答えに対するコメントで言ったことに同意するでしょう。他の人があなたのコードを読んでくれれば、それは良いアドバイスです。 –

答えて

0

names = ["MARY","PATRICIA","LINDA","BARBARA","ELIZABETH" . . . .] 

alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 
      "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] 

names = sorted(names) 
total_score = 0 
for i in range(0, len(names)): 
    name = names[i] 

    letter_score = 0 
    for letter in name: 
     letter_score += alphabet.index(letter) + 1 

    total_score += (i+1) * letter_score 


print(total_score) 

結果は、それが動作するかどうか、正しいとして、この答えを投票することを確認してください871198282
です!

+0

私のコードで何が間違っているのか教えてください。 –

+0

私は本当に自分のコードが何をしているのかわかりません。あなたの変数や外部機能が何であるかを明確にすれば、多くの助けになります。また、多言語関数名を3文字以上使用することをお勧めします。すべてのコードを理解することなく、私がアドバイスできることは、ファイルをきれいにして、ファイルに番号を付けて、名前を付けたファイルを正しくインポートしたことを確認することです。再開してみてください。すでに壊れているものを修正するよりもずっと簡単です。 – Nate

+0

あなたのアドバイスをありがとう! –

関連する問題