あめんばーどのバーチャル日記

バーチャルな世界で過ごして競プロしてる人の雑談

問題ができるまでの振り返りメモ

すっかり作問のことも落ちている昨今。
今月は3連続ARC+AGCという黄橙がまぁまぁ忙しい期間ともなり地味に2年ぶりにレートがHighest更新しました。

いや、もう無理だろうなーと思ってたんですがそんなことないんですね。
で、作問については一応コンテスト2回開いたこともありましてtesterガーwriterガーテストケースガーclarガーヴァリデーションガーの領域はわからないわけではないかな、と思ったんですね。

でも面白い問題作れてますかっていうと自分なりにはそんなに満足していない感じです。

そんな感じで「いい問題の作り方」みたいなのが気になってきたな、と思って軽い気持ちで呟いたところ憧れの頂点のmaspyさんからリプをいただき記事を紹介してもらえました。(前者は有料記事なのでご注意)

https://note.com/degwer/n/n270f59cb7809
https://www.topcoder.com/blog/how-to-come-up-with-problem-ideas/

有料記事含みますので中身の細かいことまでは言いませんが、なんとなくこの記事を踏まえた上での作問これが良かった悪かったをもうちょい振り返ってみようと思いました。

個人的に「いい問題が作れた」・・・と思っていない順に挙げます。
客観的意見あったらいただけると嬉しいです。でも単に知識経験不足が理由だと泣きます。どうしようもなかったんです。

前提として、例によって私の単独コンテストについては趣旨として全てにVRChatネタを含んでいます。
Power Eraser(単独コンではない)とContinuous Flip(VRChatネタを入れようと決めた前に作った)については、含んでいません。

決して「問題が悪かった」というよりは「こうすればもっと良くなったかもな」「ここから考えるのはここが活かしづらかった」という自分の戒めです。基本的にtesterさんがたが最高の形にしてくれたので、悔いはありません。

Avatar Height

簡単枠だが実は答えが-4,4しか存在しないというネタ問題。
性質としては好きなんだが問題を解く側としては触れられないしそれを本質にするには非常に繋げづらい。
結局ちょっとしたコードゴルフのためのギャグにしかなりきれないという問題に繋げるにはちょっと厳しかったなという例。
あくまで簡単枠だからそんなに捻られないというのもちょっとあったな。と言った感じ。もっとうまくできたんじゃないかなぁという筆頭。
というか、OEISや実験を前提にさせる問題ってやっぱあれなんだね、と記事を見て思った。

Pickup Parenthess

問題としては結構練りに練って完成したものではあるんだけど、正直なところ「アルゴリズムから問題を作成した」の筆頭だったりする。
「包除原理とカタラン数をいい感じに組み合わせられないかな」と考えたので、後から見返すと「上位から見たら解法が丸見えだな・・・」という印象。
コンテスト自体はABC-likeなのでそんなに問題はないし教育的な観点から見ればものすごくいいのだが「面白い問題作れたー」という意味では何かできたんじゃないかなと思ってる。
色々考えて「FFTとマージの仕方を工夫すればさらに間に合う」と制約が発展し、本当に教育的には無茶苦茶いい問題になったと思ってる。あくまで「アルゴリズムから考えちゃった結果、初動が丸見えだな」という話。

Game World for PvP

難しい枠なのにアルゴリズムから問題作っちゃった奴らその2。
こっちは初めてだったので許してくださいの気持ちがある。

Initial Motion

Pickup Parenthessとほぼ同様。アルゴリズムから作成した丸見え枠。とはいえ、元からヤバめの星3集団の中で解かせる気で置いた問題なので、まあいいかとは思ってる。

Mirror Relay

難しい枠なのにアルゴリズムから問題作っちゃった奴らその3。Palindromic Tree自体が非常にマイナーかつ私が好きな構造だったのでだしたもの。マイナーなりに解かれずって感じではあったし終わった後にPalindromic Tree作った!って人もいて狙ったことはできたのだが、やっぱり解かれ具合を見てると知ってる人にはサクッと解いて終わりにさせられている感じはあった。
ABCーlikeだからというのはあるけど、前回のボス問的にちょっと申し訳なさが強かった。

Friends+

testerのご助言もあって最終的には割と良問になったは思ってるんだが、別記事でも言った通り初期原案が終わってる
他の問題が「後からVRChatネタにこじつけた」か「VRChatネタから作ったが簡単枠」なのに反して「VRChatからネタを拝借しつつ難しめ枠」の結果大事故を起こしかけた問題。
最初の最初、あまりにもVRChatに寄せようとしてjoinだけでなくfriend,block,new instanceというコマンドを入れようとしていた最初。
一応問題を考えた後に平方分割を使えば解けそうだなというので作ったのだが、全然問題の本質じゃないただただ実装を重くするだけのコマンド達がいたのである。
testerに見せる前にblock,friendはさすがにないだろと思い留まったのだが・・・二転三転

「問題設定はシンプルな方がいい」本当にそれである。writer想定解が間違ってるとかで二転三転したが、まあそれはいいかな(結果的にbitset高速化解法も出てきたりでいい形には落ち着いてたと思う)

Power Eraser

こちらはVRC競プロ部でのオムニバスコンで作成した問題。こいつもアルゴリズム・・・というより数学的性質で作成した問題。
「こんな問題O(N^2)で考えたけどさすがに解法がシンプルすぎるから没にしようと思っている」
・・・を某VRC競プロ部赤色の人が制約を超強化した問題。FPS怖すぎる。
私が考えたラインまでは本当に「行列式の性質とヴァンデルモンドの行列式を理解していますか」くらいのものである。
死ぬほど勉強になって個人的経験としては死ぬほど良かったんだが、自分が出せた成果としてはすげえ人すげえなー!!って感じ。

Flying Camera

簡単枠なので適当に決めたが、入力を三次元にすれば良かったなぁというちょっとした思いがあるのでこの位置

Expression Menu

VRChatでExpression Menuの仕様を読んだ時にこういう問題作りたいなぁと思った一発ネタなのでこの位置

Backflip

Summer Project

Freight Train

超簡単枠!遊んだ!

Real Collider

名前自体はVRChatだが、内容自体はすごく基本的な幾何。
動機としては「前回のExpression Menuがかなり簡単枠で見られたので、問題がシンプルかついろんな人が引っかかりやすい問題を作ろう」と思い「みんなが解けないもの、幾何だな」と思って、かつフレンドからリアルコライダーの単語をいただいたので「円の内外判定で三角比を使う方法を前研究したからそれでオーバーフロー合戦かな」と思いました。
頑張ればオーバーフローも回避できるぜ。

そんなことなかった(大虐殺)

とはいえ、えこってさんの回答筆頭に面白い解法はいっぱいあったし、すごい悪い問題じゃなかったんじゃないかな・・・とは少し思う。
シンプルな問題、いいね
でも難易度設定は間違えないようにね

ただ、やっぱり自分の知識や経験をそのまんま問題にしているので一発ネタになってしまう。自分のストックがなくなるともう問題を作れなくなってしまいそうな気もするのがネック。

Very Poor

「VRChatネタから作った簡単枠の問題」ではこれが一番気に入ってるかなぁ。サンプルにちょっとした問題のネタの数字を入れるのって楽しいね

PhysBone Maker

yukicoder contest 390は「H問題の原案が褒めてもらえて嬉しかったのでA〜Gも追加で作成してコンテストにした」という感じなので、H問題以外は基本的にぶっちゃけると「急遽追加した!全部アルゴリズムから作ったよ!」が中心である。
対してこちらは「崖ができてしまったのでそれっぽい問題しなきゃ、えーと、なんか、こういう問題とか!(適当に問題文作る)あ、解けるわ!しかも難易度ちょうどいい!!!」となったやつ
つまり
設定を作成する→考察を吟味する→考察に対して調整する
をめっちゃ無意識に行った問題。今でもこの問題は難易度帯としても相当気に入ってる。
まあ解法は結構見えやすい方だと思うけど、初手の中では相当気に入ってる。

Tone Correction

この問題も、まぁ元ネタから考えた後にアルゴリズムから作りましたと言われるとその通りなのだが実は最初に考えていた解法が間違えていたことで一転した問題。
設定だけが残ってこれを解くにはどうすればいいかという状況に追い込まれたのである。
結果的にまぁなんとか解けるなーとなった上でどこまで伸ばせるかなってなった感じ。

これについてはFriends+の反省もあり「元ネタから設定を作る際はできるだけシンプルにする」という経験が活かせたのもある。

Continuous Flip

なんでこの問題作れたんだ・・・???作問の記念すべき一問目にして2度と超えられる気がしない問題。ある意味全ての元凶。
作問した流れとしては

  • VRC競プロ部TLで作問つぶやきが流行る
  • VRC競プロ部の方が「エレベーター(複数階移動)とハシゴによるコストの最短経路問題」を呟く
  • 典型90で「区間のクエリを辺として扱い、最小全域木を作る問題」が私が好き
  • 頭の中でなんか突然組み合わさる
  • 「・・・あ、あれ、これめっちゃ面白い問題じゃね・・・???」となる
  • 赤色の方が「testerやるよ〜」と言って形にしちゃう

この問題については一発ネタと偶然が多いので振り返られる点が「精進しよう」「いろんな問題みよう」に帰着すると思う。
ある意味、作問の流れとして良かったのは上二つが理想だったので良かったなぁ。と思います。


問題はできるだけシンプルに作った後に、後からちょいちょい肉付け調整するのは本当に強いなぁって感じがしましたね。
というわけでメモはメモだよ!終わり!