Project Eulerを始めた

2019-02-19

メンタルが大分安定してきたので、年明けから毎日のタスクとしてGitHubに草を生やすことを心がけている。 毎日少しずつでも進捗が出せるちょうど良い題材はないかと探していたところ、Project Eulerが数学のやり直しにも 良さそうなので始めることにした。

Project Euler is?

Project Eulerはプログラムで解くための数学の問題を集めたサイトで、2019年2月現在、650問以上掲載されている。

最初のうちは下に引用するようにとても簡単だけど、問題が進むにつれ段々難易度が上がっていく。

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.

Problem 2

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

目的とレギュレーション

Project Eulerを進める上では次の3つを主目的として念頭においている。

  1. コーディングの習慣化
  2. 数学の再学習
  3. アルゴリズム力向上

これらを達成するためにゆるいけれど次のレギュレーションを設けた。

  1. 毎日最低1問は解く
  2. 力ずくで解かない(公式や定理、アルゴリズムを積極的に使う)
  3. ライブラリはできるだけ使わない(あえて車輪の再発明をする)

1つ目ののレギュレーションは説明するまでもないだろう。
2つめについてはProject Eulerの公式サイトでも

I solved it by using a search engine, does that matter? Making use of the internet to research a problem is to be encouraged as there could be hidden treasures of mathematics to be discovered beneath the surface of many of these problems. However, there is a fine line between researching ideas and using the answer you found on another website. If you photocopy a crossword solution then what have you achieved?
https://projecteuler.net/about

と書かれており、知らない定理も検索して活用することが推奨されている。
数学のやり直しを兼ねているのでループ回して力技で答えをだすことは避けている。
3つ目については、自前で実装してみることで、理解度を向上させることを目的に追加した。

まだ始めたばかりで解いた問題数も多くないけれど、英語と数学とプログラミングがまとめて学習できて一石三鳥な上にペースメーカーにもなってくれているので、このまま継続したい。