done is better than perfect

自分が学んだことや、作成したプログラムの記事を書きます。すべての記載は他に定める場合を除き個人的なものです。

project euler 始めました

project euler始めました.これはプログラムで解く数学の問題集で,プログラミングコンテストの問題演習にも使えるかと思います.本家は全て英語で問題が書いてありますが,有志が日本語のwikiも作っています.

今problemの1から24までと,67の計25問解き終わりました.問題は簡単にわかるようなものから,一切工夫せずにゴリ押しのプログラムで解くと何日も計算が終わらないようなものまで様々です.興味ある方はぜひやってみて下さい

暇なときに1問づつ自分が書いたプログラムを載せて解説したいと思います.出力される解答は正しいとは思いますが,もしかしたらもっと効率がよかったり,シンプルに解ける問題があるかも知れません.ご了承下さい.基本的にはPythonで解いていきます.また,問題文は全て日本語wikiからの引用です

Problem 1

10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる. 同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.

高々1000までなら,愚直にやってもすぐに計算が終わりそうです.以下,自分が書いたプログラムです.

print sum([i for i in range(1000) if i % 3 == 0 or i % 5 == 0])

リスト内包表記を使うと凄まじくシンプルに書けますね.project eulerでは割りと「条件に当てはまる数の総和を求めろ!」みたいな問題が多いので,リストの中に条件に当てはまる数を入れて,その総和を取るという手法はよく使います.もっといい方法があったら誰か教えて下さい!