はじめに
yukiと申します。DMMWEBCAMP にお世話になって、今は WEB エンジニアとして勤務しつつ、自分で仲間を集めてサービス開発したり、プログラミングの家庭教師したり毎日エンジニアライフをエンジョイしています。
未経験から目指している方向けのサポートやエラー質問なども引き受けておりますので、気になった方は DM へお願いします。
私はかつてド文系で国語科の高等学校の教員をやっていたのですが、色々あって今は上のキャリアで楽しく過ごしています。
大学受験の際に数学は2Bまで学習していたのですが、プログラミングをする時にとても役立ちました。
もし、高校の頃に 「ちょっと数学を避けてしまったな…。でも考え方がプログラミングに使えそうだしな…。」と言う方向けに、今回は数学とプログラミングが同時に学習・復習できるProject Eulerをご紹介します。
Project Eulerとは
プロジェクトオイラーと読みます。
https://projecteuler.net/
説明はwikiより引用。
プロジェクト・オイラー(英: Project Euler、名称はレオンハルト・オイラー由来)は、数学やプログラミングなどに興味を持つ大人や学生が主な利用者であり、プログラミング (コンピュータ)による一連の計算問題の解決を目的としたウェブサイトである。 400以上[2]の問題の他に毎週末毎に1問ずつ増えており、様々な難問が用意されているが、 一般的なスペックのパソコンで効率的なアルゴリズムを用いれば、いずれも1分未満で解ける。
自分はプログラミングスクールでの学習が終わったのち、数学の復習もしたいと思い、こちらに取り組んでいました。
rubyで解いたリポジトリはこちらです。(50位までやりました。)
数学チックな問題、かつ出力の方法も難しいような問題がたくさんあり、非常に頭を使いました。
例題
では、試しに1問目をみてみましょう。
と、その前に、日本語のサイトが前はあったのですが落ちています・・・。
と言うことで、元サイトを翻訳してくれる素晴らしい拡張機能を先に入れましょう。
https://chrome.google.com/webstore/detail/project-euler-translate-i/oeicjfkbfahmdklgoollemcahaljgklo?hl=ja
10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる.
同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.
自然数って何だっけ…?って思った方、大丈夫です。ぐぐりましょう。
私の解答
max_number = 1000
answer = 0
for num in 1..max_number -1
if num % 3 == 0 || num % 5 == 0
answer = answer + num
end
end
puts answer
過去に作った解答なので、もっと良い方法があるかもしれません。
オススメする理由
文系からエンジニアに転職する方も多い昨今、数学を振り返ることはとても重要だと考えています。私は2Bまでしか履修していないので言えた口ではないのですが、数学自体は嫌いではなかったので 「問題を細分化し、ロジックを組んで答えにたどり着く」 と言う論理的な思考は非常にプログラミングに生きているなと感じます。
ただ、教科書を引っ張り出して1からやり直すのも大変ですし、せっかくならプログラミングを勉強しながらやるのも良いんじゃないかなと思ったので紹介しました。
私はProject Eulerをやってみて、嫌いではなかった数学がちょっと好きになりました。なぜなら、「プログラムが」計算をしてくれるからです。これまでは面倒くさい公式を使って、計算ミスに気をつけながら、ノートを汚くして解いていた数学が、ロジックさえあっていれば答えが綺麗に出てくれるので、とても快感でした。
もしかしたら、数学嫌いの克服にもなるかもしれないので、是非一度挑戦してみてください。