【競技プログラミング】標準入力の受け付けと各桁の合計
概要
競技プログラミングの復習。
近況
直近の記事から早2ヶ月。CCIEの勉強もロクにせず、僕は『ゼロからはじめるデータサイエンス』の写経もそこそこに、CTFや競技プログラミングに手を付けていた……。
ゼロからはじめるデータサイエンス ―Pythonで学ぶ基本と実践
- 作者: Joel Grus,菊池彰
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/01/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Pythonでの標準入力の受け付け
「競プロやってみよう」と思い立ったその日から、AtCoder Programming Gude for BeginnersでC++のお勉強をしてたんだけど、身の回りの競プロに勤しんでいる人たちがPythonでやってるのを見て、自分もPyhtonistaとして参戦することを決意した(仕事でも使ってるし)。
先日のCodeFlyerが初参戦。結果は2完。事前にPythonでの練習をしていなかったので、問題以前に標準入力の受け付け方が分からず、慌ててググるなど。
Pythonで競技プログラミングする時に知っておきたいtips(入出力編)
input()
標準入力から1行読み込んで、末尾の改行を除いて標準出力に出す。複数行を読み込みたい場合、ケースに合わせて工夫が必要(行数が固定ならfor in range(行数)でリスト内包する、など…引用記事中にケース毎の説明があるのでいったん割愛)。
$ cat input.py N = input() print("input is " + N) # 文字列型の場合 $ echo "ABC" | python input.py input is ABC $ # 数値型の場合 $ echo 123 | python input.py input is 123 $ # 複数行の場合 $ python -c "print('THIS\n IS\n TEST')" | python input.py input is THIS $
各桁の合計を求める
……必要のある問題が出てきて、これも先人の知恵を頼った。
http://suzu6.hatenablog.com/entry/2017/09/22/004355
def digitSum(n): s = str(n) # 1 array = list(map(int, list(s))) #2 return sum(array) #3
- 値nをstr()で文字列に変換する
- map()でsを1文字ずつint型に変換してリスト(array)に追加する
- sumでarrayの合計を算出し、returnする
map()
mapは第1引数に関数、第2引数にイテレータを指定して、第2引数の各要素を引数として第1引数を実行した結果をイテレータとして返す関数っぽい。どうやらPython3の場合、そのままだとmapオブジェクト(print()すると「
2. 組み込み関数 — Python 3.6.5 ドキュメント
引用したブログ記事内にも説明がある通り、リスト内包で同じことができる。
array = list(int(i) for i in list(s))