5
5

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 5 years have passed since last update.

python ProjectEulerを30問解いて学んだこと

Last updated at Posted at 2015-03-02

ときはじめの俺のレベル

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問目)

答えを求めるだけなら概ね優しい。

総合

振り返ってみると結構いろいろ学べた。

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?