この記事はtraP Advent Calendar 2017 12月14日の記事です。
何か技術的な話ができたらいいなと思ってたのですが、間に合わなかったのでとあるサイトの紹介をします。
Project Eulerです。
Project Eulerとは
数学的なプログラミングの問題を解くサイトです。
現時点(2017年12月)での問題数はざっと問あります。
今もなお新しい問題が時々追加されています。
簡単な問題から難しい問題まで色々あり、数学的な思考力や知識が試される問題が多いです。
例えば最初の問題はこんな感じ。
Problem 1:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.Find the sum of all the multiples of 3 or 5 below 1000.
[Project Euler: Multiples of 3 and 5]
要約すると「の倍数 または の倍数 のうち、より小さい数の和を求めなさい」となります。
Project Eulerにはこのような問題が大量にあります。これは第一問目なのでかんたんな問題なのですが、問題番号が上がるに連れてどんどん難易度も上がっていきます。
解答を提出するまでの流れ
1. アカウントを作る
自分の解いた解答があってるかどうかを確認するためには、まずアカウントを作る必要があります。サイト右上にある「Sign In」からアカウントを作ってください。ユーザ名とパスワードを登録するだけなので一瞬です。
2. 問題を選ぶ
メニューの「Archives」あるいは「Recent」から問題を物色します。「Archives」は過去の問題一覧があり、「Recent」には直近で追加された10問がリストされてます。最初のうちは「Archives」の問題1から順に解くといいでしょう。
3. 問題を読む
問題がすべて英語なのでつらいですが頑張って読みましょう。
ちなみに有志の方が問題の和訳をしてくださっているみたいなので、そちらを利用するのもありです。→Project Euler - PukiWiki - odz
4. 問題を解く
問題を解きます。言語はなんでもいいです。CでもJavaでもPythonでもHaskellでもDでも。
競プロみたいにジャッジサーバーがリモートにあるということではないので、手元で解答が出せさえすればいいです。
Mathematicaを使って解いている人もいるみたいです。東工大生ならTSUBAMEの力を使って並列計算で殴るのもありです。
5. 提出する
問題の下の方にあるフォームに答えを書いて提出します。
提出はログイン状態でしか現れないので注意してください。
どうでもいいけどProjectEulerのCAPTCHA、「1」と「7」の判別が難しい。
間違いなら
正解なら
こんな感じで表示されます。
6. 議論スレッドを見る or 参加する
問題に正解すると、その問題の議論スレッドを見ることができるようになります。
めちゃくちゃ頭の良い解法とかがあったりするので、読んでみるといいかもしれないです。
Project Eulerの各機能
Friends
あまり知られてないけどProject Eulerにはフレンド機能があります。
サイト上方のメニューの「Friends」から機能が使えます。
こんな感じでみんなの進捗が見れます。
Progress
サイト上方のメニューの「Progress」では、現在の進捗や得た勲章を見ることができます。
モチベ維持にいいです。
@projecteulerbot
Project Eulerのbotです。有志が作ったみたい(?)
100番以内に解くと名前付きでツイートしてくれます
おわりに
Project Eulerをすると
- 問題を定式化する力
- かんたんな問題へ帰着する力
- 知らないことをググる力
- 純粋なプログラムの実装力
- 数学(特に素数周りや組み合わせ論)に関する知見
が鍛えられます。
数学とプログラミングが好きな人にはもちろんプログラミングの勉強をこれからはじめたいという人にもおすすめです。
明日はreireiさんとs_cyanさんの記事です。お楽しみに!