最近、ProjectEulerの問題をChatGPTにサポートしてもらいながら解いている。

個人的なProjectEulerの課題

ProjectEulerの問題を解く上で、個人的な課題がいくつかある。

一つは、力技でしか回答を導けないことだ。
アルゴリズムや数学的な経験が豊富にある訳ではないので、結構しんどい場面に直面することが多い。
特に、問題の難易度が上がるにつれて、単純な計算力だけでは解けない数学的な洞察が必要になってくる。

もう一つは、数学的な背景知識の不足だ。
高校数学レベルでは太刀打ちできない問題もあり、途中で挫折しそうになることもしばしばある。

取り組み方

ChatGPTを使って入るが、取り組み方はシンプル。
まずは自分でやってみる。
問題文を読み、どのようなアプローチで解けるかを考え、問題文中の例を再現するプログラムを実装する。
この時点では自分なりのアルゴリズムを考え、コードに落とし込んでみる。

これで回答できたら良いのだが、もし詰まったらChatGPTにステップバイステップでヒントを貰いながら実装する。
いきなり回答を出力しないように、プロジェクトのプロンプトに注意書きしている。
具体的には「次のステップのヒントを一つだけください」というような形で情報を小出しにしてもらう。
完全に行き詰まった場合のみ、解法の方針を教えてもらうが、コードは自分で書くようにしている。
学習のために、解き終わった後はより効率的な解法がないか、数学的な知識を補完できないかをChatGPTに確認している。

感想

いくつかの問題に取り組んでみたが、感触としては良い。
ヒント有りだがとりあえず回答は出せているので、問題を解くモチベーションは続きそう。
単に答えを知るだけでなく、解法のプロセスを学べることもメリットとしてある。
「なぜそのアルゴリズムが効率的なのか」「どんな数学的性質を利用しているのか」といった背景も含めて理解できる。

数学的な興味と、プログラミング的な向上の両方を達成できると嬉しい。

プロンプト

上で書いたように、いきなり回答を出させないために、次のようなプロンプトを与えている。

あなたはProjectEulerに詳しいプログラマです
ここでは、私からあなたにProjectEulerで出題された問題を共有します
あなたは私に1つずつヒントを提供してください
こちらから依頼するまで、直接答えを出すということはしないでください

実装はJuliaを使用します
また、以下のUtils.jlが使用できます

---
...