この記事は、夏のブログリレー2025 12日目の記事です。
はじめに
お久しぶりでございます。Naru820です。
今私はインターンシップに行っていて忙しいので、この記事は手抜き記事です。許して!
本文
まず前回の記事を読んでください。
読まなくても構いません。
前回の記事では作問する際の主なアプローチが見た目から作る、解法から作るの2種類と言っていました。ただこれは不正確というか、一応一般にも通じるように書いていました。(主に競技性を求められる問題の事を意識していましたが。)
そこで今回は、特に競技性を求められる問題(例えば、競技プログラミング、CTF、競技数学、学力試験、パズルなど...)、について絞って、もうちょっと深い話を紹介していきたいと思います。(一応、競技プログラミングや、数学をメインターゲット、というか意識して考えています。)
解法から考える
解法から考えると言っても、この解法を使いたい…というだけではなかなか問題案は出てきません。
ただ、主に解法から問題を作る方法としては以下の2種類ぐらいしかないと考えています。
典型的な設定を使う
これが正直一番楽ですし、前回の記事でもこれを意図して書いていた節があります。
競技プログラミングで言えば、例えば二分探索を使わせるなら、最大値を最小化する、とか中央値の問題にする、とか、CTFだったら、cryptoだったらRSA、楕円曲線暗号とかです。
ここで止めると、多分あなたが天才でなければ良く言えばeducationalな、悪く言えば低難易度のつまらない問題ができます。
ここからさらにもっと難しくしたいなら、さらにそこにたどり着くまでのステップに、また別の典型的な設定を組み合わせる、一つ用意した結論にたどり着いた後に全然別の問題を無理やりくっつけるなどの方法があります。
例えば、さっきの例で言えば、最大値を最小化する二分探索の問題に、判定問題を解くのにDPを使わせる、とか、RSA暗号にするんだったら、そこに数論的な要素を混ぜるとか。
多分、大抵(東大、京大、東工大、またはそれに類する難易度未満)の入試数学、特に医学部数学の問題はこういうステップで作られていることが多いように感じます。明確にステップを踏んで問題を作っているので、当然ながら解く際にステップを踏ませる事ができて、結果的に知識を測れる問題ができやすいからかな〜と思っています。
頑張って考える
頑張って下さい。私もやり方は知りません。一応やるなら、設定を天から頑張っておろして問題が解けるまでそれを繰り返すとかになるんでしょうか。よく知りません。
見た目から作る
見た目から作るって書いといてなんですが、見た目って何やねんって話ですよね。ちょっと不正確でした。
見た目ではなく、問題設定と呼ぶべきでした。すみません。
で、問題設定を考えるってどうするの?という話です。
具体的な方法としては、以下のようなものがあると思います。
典型的な設定を使う
さっきも出てきただろって?そうです。さっきは使わせたい解法の典型的な設定を使う、という流れでしたが、今回の使い方は、典型的な設定をアレンジしてみる、というものです。(これは数学寄りな分野じゃないと厳しい気もします。)
一番簡単なアレンジとしては、競技プログラミングだったら、例えば最大値を求める典型的な問題があったら、最小値を求める問題にする、とかそういうことです。他にも、スワップする問題が合ったら、スワップする幅を変えてみるとかです。
アレンジにも大きく二種類あって、問題が問うているものを変える(これは一個間違えるとクソ問が爆誕しますが)、設定を一部変更するなどがあります。まあどっちも試してみるといいと思います。
具体例でいうと、https://yukicoder.me/problems/no/3120 とかでしょうか。
全然関係ないものを元ネタにする
これも結構よく見ます。例えば、自分が好きな美少女ゲームの1つにnineという作品があるんですが、これには枝という概念があります。これから、グラフを連想して、グラフ理論の問題にすることが出来そうです。(あまり言うとネタバレになるのでこれ以上は言及しません)
ふとした思いつきを問題にする
これが一番ad-hocな問題ができやすいです。
例を挙げると、自分の問題で言えば、https://yukicoder.me/problems/no/3123
とかがそうです。
逆順列って、逆順の列だよな~と思ったらこの問題ができて、投げてみたらなんか解かれてしまったので出題されました。
あなたが天才ならこれが一番面白い問題ができやすいのでお勧めです。
ランダムにやってみる
これは正直最終手段です。
とりあえず、思いつく限り設定をリストアップして、問うものをリストアップして、その組み合わせを全通り試してみるという方法です。(あまりに苦しいのでおすすめしません。)
おわりに
以上、手抜きでした。
皆さんはうっかり労働やインターンシップをして忙しくなることのないようにしましょう。
ちなみに、CTF班の部内コンテストが1週間後にあるんですが、まだ私はネタが1個も思いつかなくて問題を1ミリも作っていません。ギャー―――――!!!!!
明日の記事は@gaulo です。楽しみ~。