プログラミング(アルゴリズム)および数学に関係する興味深い問題を多く掲載している Project Euler(プロジェクト オイラーと呼びます)というサイトを紹介します。
どんなサイトか
このサイトの目的は、以下のように表記されています。
“Project Euler exists to encourage, challenge, and develop the skills and enjoyment of anyone with an interest in the fascinating world of mathematics.”
https://projecteuler.net/about
訳は以下です(GoogleとDeepLの翻訳を基にしました)。
Project Euler は、魅力的な数学の世界に興味を持つすべての人を励まし、挑戦し、スキルを伸ばし、楽しんでもらうために存在しています。
形式的には、競技プログラミングのサイト(AtCoder や AIZU ONLINE JUDGE)に近いですが、800問を超える問題に対して、解答のみ入力する形式になっています。アカウント登録は無料でできます。サイトの記述は英語です。
掲載している問題は、数学的な要素が強いものが多く、難易度が高い問題も含まれています(正直に告白をすると、私では手も足もでない難易度の問題が多くあります)。
また、このサイトの名前の由来である Leonhard Euler(1707-1783) は、非常に多くの業績を残した数学者として知られています。この記事の画像は、Euler の肖像画です。
どんな人が参加しているのか
問題の解答を投稿するためには、アカウントを登録する必要があります。このときに Location として国を登録することができます。統計情報から、どの国の人がどれくらい参加しているか分かります。
アカウントが多い5カ国と日本のアカウント数は以下でした(2022年7月31日時点)。
国名 | 参加者の数 |
USA(アメリカ) | 45662 |
India(インド) | 15756 |
Germany(ドイツ) | 9965 |
England(イギリス) | 9144 |
Canada(カナダ) | 7525 |
Japan(日本) | 4172 |
アメリカからの参加者が一番多いですが、世界中の人が参加していることが分かります。
使われているプログラミング言語
アカウント登録時には、プログラミング言語も登録します。ただし、このサイトは、解答のみを入力するため、そのプログラミング言語を本当に使っているかは分かりません。実際、私は、C/C++ で登録していますが、他の言語も使っています。
利用者が多い言語は以下でした(2022年7月31日時点)。
プログラミング言語 | 利用している人の数 |
Python | 60922 |
C/C++ | 46052 |
Java | 29684 |
C# | 14127 |
Haskell | 7105 |
Python が人気のようです。上位の4言語は、他の調査(例えば、TIOBE Index)と比較しても、同じような傾向ですが、なぜか Haskell が5番目に位置しています。
競技プログラミングでは、サーバが割り当てるCPU時間は数秒程度の場合が多いです、一方、Project Euler は、解答だけを入力するため、多少遅い言語でも許容できます。極端ですが、手計算で答えを求めて入力してもよいです。このため、一般的な競技プログラミングのサイトと比較すると、言語の選択肢の自由度は大きいです。
今後の話題
「Project Euler というサイトは、アルゴリズムおよび数学について、興味深い問題が多く掲載されていて、世界中の人が楽しんでいることは分かった、でもどんな問題が出ているのか知りたい」というかたもいると思います。
Project Euler では、問題が解けた場合でも、解決策を公開することは避けてほしいと参加者にお願いしています。これはサイトの性質(解答だけ入力)を考慮すると仕方ないのですが、ありがたいことに、最初の100問については、このお願いの例外になっています。実際、この100問には、興味深い問題が多く含まれています。
ということで、まずは最初の25問(25問解くとサイト内でレベル1と認定される)の解説をぼちぼちしていきます。