ときはじめの俺のレベル
if文、for文、while文を知っていた。
リスト内包表記というものがあるらしい(辞書、ジェネレータについては不知)
属性?なんすか、俺はマゾ属性+メガネっ娘属性ですが?
python的に学んだこと
リスト内包表記
http://docs.python.jp/2/tutorial/datastructures.html
例:
Project Euler 29
http://qiita.com/cof/items/b39c28e8770fc60b074d
辞書内包表記(Python 2.6?くらい以降)
?(感覚で)
例:
Project Euler 23
http://qiita.com/cof/items/3e02bca57b6a6dc1578a
リスト内包表記、辞書内包表記、ジェネレータの違い、記法(by shiracamusさん)
下記のコメント参照
http://qiita.com/cof/items/b39c28e8770fc60b074d
if文の分岐を辞書化でコードを単純化できる?(俺理解)(by shiracamusさん)
下記のコメント参照
http://qiita.com/cof/items/567dbc499fbf6d4aefb1
map()関数
http://docs.python.jp/2/library/functions.html#map
例:
Project Euler 20
http://qiita.com/cof/items/400ae6793819850ce68a
reduce()関数
http://docs.python.jp/2/library/functions.html#reduce
例:
Project Euler 22
http://qiita.com/cof/items/40519ba5d3d59db079de
lambda
http://www.lifewithpython.com/2013/01/python-anonymous-function-lambda.html
time 特にtime.time()を適当に
http://docs.python.jp/2/library/time.html
timit()関数
http://docs.python.jp/2/library/timeit.html
使い方
http://qiita.com/cof/items/ddac98e31a5a4bf16ec7#comment-e9bb24a7450c6b0d74fd
file->リスト化
例:
Project Euler 22
http://qiita.com/cof/items/40519ba5d3d59db079de
定数は大文字で書くとわかりやすい。
range()を多重ループで用いると速度が遅くなりやすいので、ループの前に予め変数に入れておくとよさげ。
アルゴリズム的に学んだこと
リスト内包表記は(概ね)速い
http://qiita.com/cof/items/ddac98e31a5a4bf16ec7#comment-e9bb24a7450c6b0d74fd
in xxxで参照するときは辞書、setsを使え。
http://www.peignot.net/python-speed
なんか作るときは、現在のステータスから次回のステータスを作成するような関数を作成すると簡単
例:
Project Euler 28
http://qiita.com/cof/items/567dbc499fbf6d4aefb1
Project Euler 19
http://qiita.com/cof/items/44b380466e560de99e25
扱うべきデータに対する考察を加えてアルゴリズムを改良すると、処理をスムースに行いうる。
例:
Project Euler 24
http://qiita.com/cof/items/874ddf45e86d94f817bf
Project Euler 26
http://qiita.com/cof/items/567dbc499fbf6d4aefb1
Project Euler 10
http://qiita.com/cof/items/13dd1b3c29b43452cdc0
既存のアルゴリズムの改変で効率的な処理を行える場合がある(※既存のアルゴリズムがなぜ効率よいかを理解する必要が有り
例:
Project Euler 21
http://qiita.com/cof/items/e86d6e6db090dd54b006
例2:
Project Euler 12
http://qiita.com/cof/items/222d51c09b043da974af
再帰を使うときは最終的な(初期の)パラメータを設定することが重要。(but 俺の実装では遅い)
例;
Project Euler 15
http://qiita.com/cof/items/e97797aa692d569164e3
Project Euler 18
http://qiita.com/cof/items/ccee79fbf84a93d21c1b
計算結果の記憶で高速化が測りうる。
例:
Project Euler 14
http://qiita.com/cof/items/ddc4d797ff2979f1a3be
Project Euler 9
http://qiita.com/cof/items/ef35068f3e63ede66eaf
アプローチはいろいろ考えられるが、必ずしも早くなるとは限らない。
例:
Project Euler 4
http://qiita.com/cof/items/96fed868672ec1e0c404
Project Euler 5
http://qiita.com/cof/items/5c9670c4ac3f7988ae14
高速化は高速化で得られるメリットとそれに費やすコストとの比較が重要
例:
Project Euler 2 2.21マイクロ秒の節約のために15分費やす男
http://qiita.com/cof/items/2591c15c6f63c89f304c
Project Eulerの難易度(1問目~30問目)
答えを求めるだけなら概ね優しい。
総合
振り返ってみると結構いろいろ学べた。