0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Project Euler】Problem 22: 名前のスコア

Posted at
  • 本記事はProjectEulerの「100番以下の問題の説明は記載可能」という規定に基づいて回答のヒントが書かれていますので、自分である程度考えてみてから読まれることをお勧めします。

問題 22. 名前のスコア

原文 Problem 22: Names scores

問題の要約:文字の値をアルファベットの順番、単語の値を文字の値の和としたときに添付のnames.txtの5000個の名前の値の合計を求めよ

Google Colabでちょっと厄介なのがファイルの読み込み。Windowsでは以下の手順で行います。

1.ファイルをダウンロードして適当なフォルダに置く(例えば、¥ダウンロード)
2. 以下のプログラムを実行して「ファイル選択」ボタンを押すと、ダイアログボックスが出てくるのでダウンロードしたファイルを選択
3. 同じ名前でファイルがアップロードされる

# show upload dialog
from google.colab import files
#[ファイル選択]
#uploaded = files.upload()p022_names.txt
#p022_names.txt(text/plain) - 46447 bytes, last modified: 2020/4/2 - 100% done
#Saving p022_names.txt to p022_names (1).txt

ここからファイルを読み、リストに入れて、ソートします。

f = open("p022_names.txt")
string = f.read()
f.close()
names = string.replace('"','').split(',')
names.sort()
print(len(names), names[:10])
print(names[938-1])
#5163 ['AARON', 'ABBEY', 'ABBIE', 'ABBY', 'ABDUL', 'ABE', 'ABEL', 'ABIGAIL', 'ABRAHAM', 'ABRAM']
#COLIN

名前が5163個、最初の10個の名前と、938番目が"COLIN"であることを確認しました。

さて問題に戻っての文字と単語の値を返す関数charcost, wordcostを作って、wordcost("COLIN")が53になっていることを確認します。

def charcost(c):
  return ord(c)-ord('A')+1   # return A->1, B->2,,,

def wordcost(s):
  return sum(map(charcost,s))
print( wordcost("COLIN"))
#53

後は読み込んだ名前すべてのwordcostと位置(enumerateで取得)を掛け合わせて、合計を取れば完成です。

print(f"Answer: {sum([wordcost(n)*i for i, n in enumerate(names,1)])}")

(開発環境:Google Colab)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?