アジの開きを閉じる。

競プロ(AtCoder)中心のブログ

【単独Writerコン】Ajinoko Special Contest レポート①

2023/02/12(日),最初で最後の単独Writerコンを開催しました!

とても楽しかったので報告します!

 

目次

 

 

競プロerとしての夢(ポエム)

競プロは昨年の3月から本気で始めたわけですが,典型問題集や過去問をせっせと解いているうちにある思いが沸き上がってきました。

 

「んんんんn…!自分も作問したい!!!」

 

いきなりですが,「守破離」ってご存じですか?

守破離とは,物事を修める過程を表す言葉であり,もともとは茶道や武道で用いられた用語です。

  • 「守」:一つの流派に従い,型や技を忠実に守り,確実に身につける段階。
  • 「破」:他者の考えや他の流派にも触れ,時には取り入れ,身につけたものを発展させる段階。
  • 「離」:流派から離れ,自ら創造し確立する段階。

 

競プロに流派は無いのかもしれませんが,アルゴリズムやデータ構造を修めるにあたって,この守破離を競プロに落とし込むとこうなると私は思いました。

  • 「守」:典型問題集や教本に従い,典型力・基本的な考え方を身につける段階。
  • 「破」:過去問などで様々な問題に触れ,身につけたものの特徴や拡張性を捉え発展させる段階。
  • 「離」:既存の問題から離れ,自ら新たな問題を作成する段階。←ココ!

 

レートの色ごとにこれを繰り返すイメージです。

作問はまさに「離」にあたり,競プロで強くなるための強力な裏技でなかろうか!!

それに単独Writerコンなんか開いちゃったら,すごくない!?ねえ!?すごいよね!!?

 

こういうわけで,いつからか単独Writerコン開催が夢となっていました。

開催にはいろいろ準備しないといけない。準備には時間が必要。時間があるのはいつ?

今です。今年度で学生が終わってしまう,今しかないです。やりましょう。

 

これが最初で最後の単独Writerコンテストの始まりです。

 

さあ,アジフライを作ろう!

卒論に追われ,多忙の中での企画でした。

 

アジフライを作るにはアジが必要

時間的にも精神的にも一番余裕のある春休みの開催に向けて,その半年前から地道に作問を続けてきました。

作っては捨てての繰り返し。通学時間にネタを考えてはスマホにキーワードをメモ。帰宅後に膨らませる。見返しても分からないメモに遭遇することもしばしば。

 

作問案のメモ。う~ん,分かりそうで分からん!

 

作問の仕方は大きく以下の4つタイプに分けられるのではないでしょうか。

  1. 解法ベース:データ構造やアルゴリズムなどから着想するタイプ
  2. 問題ベース:既存の問題で制約や条件を変えるタイプ
  3. 物事ベース:ゲームなど競プロと無関係な物事を問題に落とし込むタイプ
  4. 天声ベース:突然,アイデアが舞い降りてくるタイプ

 

個人間・個人内で多様だとは思いますが,私は圧倒的に2が多いです。1からも作ることはありますが,大抵は既存であったり簡単だったりします。

 

コンテストは6~7問出題するつもりでいて,予備も含めて12問作成しました。

 

アジを捌き,衣をつけて,油にGO

問題案を作成したら,次は実際にコンテストで出題するための準備をします。

具体的には,的確な問題文やサンプルケース,テストケース,解説などを作成します。

 

個人的にはテストケース作成が一番大変でした。

「ランダムケース入れとけば嘘解法は落ちるやろ!(適当)」は嘘です。そんなに万能ではありません。

想定解法がきちんと実装されているかをテストするためには,境界値ケースや特殊ケースが必要です。

 

さらにそれらを上手く交わす嘘解法を落とすにはhackケースが要ります。

正しい解法にとらわれず,あえて間違った解法を考えるというのが難しかったです。ホワイトハッカーみたい。

 

ただ,本番で嘘解法で通そうとしてhackケースでWAになった人の顔を思い浮かべるとめっちゃ楽しかった!ぬふふふ…残念だったな(不屈な笑み)。

 

試食,お願いします…!

2月1日,春休みに入った頃。具体的な開催日を考え始めました。

 

社会人の方にも参加してもらうには土日がいいよね。

3月は自分がバタバタするのでやめとこう。2月だね。

2月下旬は中高生が学年末考査の時期で参加率悪そうだからやめとこう。2月上~中旬だね。

今週末か来週末だね。Testに一定期間が必要だから今週末は無理だね。来週末だね。

 

来週末だね……

 

……

 

え!?来週末!?

 

待って待ってまだ全問題の準備できてないしTesterも募集してないし募集してすぐ集まるかも分からないしTest後の修正でどれだけ時間がかかるかもわからないしくぁwせdrftgyふじこlp(

 

とりあえず本当に来週末の参加率が一番高いのかを調べるためにTwitterでアンケートをとったところ,仮説が支持される結果となりました。

 

開催日アンケートの結果。仮説は正しかった…!?

 

この日はJOI本戦が開かれるみたいでしたが,やっぱり最初で最後の単独Writerコン。確実に多くの人に参加して欲しかったので,開催日は来週末に決定。

JOI本戦出場者のみなさんごめんなさい。

 

さて,急ピッチで準備&Testです。

Test期間が10日ほどしかなく,そもそも自分は界隈の人気者でもないのでTesterが集まるのか不安で夜しか眠れませんでしたが,3名の天使が手を差し伸べてくれました。

本当にありがとうございました。

 

問題文の校正,難化の提案,テストケースの制約充足確認,嘘解法の検出,想定解法より速い解法の提示,他言語でのAC確認…などなど様々なチェックをしていただき,コンテストの質が明らかに向上しました。

本当にありがとうございました。

 

Testerが集まらなかったらそのまま強行開催しようかと思っていました。そんなことをしたらボロまみれのコンテストに多くの方の時間を割かせることとなり,ひどいコンテストになっていたはずです。

 

やはり他者に見てもらうTestは必須だと実感しました。

 

どうぞ,召し上がれ!!

いよいよコンテスト開催日がやって参りました。

MojaCoder様に開催の場をお借りしました。ありがとうございました!

 

コンテスト名は…「Ajinoko Special Contest」です!

いろいろ案はありましたが,アルファベットの方がカッコいい&自分の名前を入れたい&最初で最後の「特別」なコンテスト,という理由で決定しました。

 

気になる参加者は……なんと約38名!!

すごい!!嬉しい!!ありがとうございます!

 

順位表。集計よりデザインに時間がかかり,4~5時間は溶かした。

 

「約38名」という正確な数値ではないのは,コンテスト終了後に順位表が消滅してしまったためです。

問題ごとの提出一覧から手動で順位表を復元したため,上の画像に載っているのは1回以上提出した参加者が対象です。実際には4人ほど未提出者を観測したので,だいたい38名が参加(登録)しました。

 

コンテスト中はTwitterで質問を待機しつつ,ずっと順位表を眺めていました。

リアルタイムで討伐される自分の問題。時折増える,WA数の赤い文字。参加者の「解けた!」「わかんねー」のツイート…

 

…………なんだこの内から湧き出るゾクゾクする感じは…!!!堪らん!!!

 

自室で一人,めちゃくちゃ興奮していました。椅子に座ってられず,部屋を歩き回ってたりジャンプしたりしていました。笑いが止まりませんでした。

コンテストに参加するのは楽しいけど,主催者側もこんなに楽しいものだったのかと気付かされました。

 

 

 

記事があっという間に長くなってしまったので,【単独Writerコン】Ajinoko Special Contest レポート②に続きます。