【日記】Atcoder橙になりました・競技プログラミングは謎解きやペンシルパズルの役に立つのか

この記事について

なんで書いたの?

 こいつ謎解きやらなくなってからずっと一人で何やってるんだ?と思われていそうなので
 あと色変記事書けるチャンスは最後っぽいなと思ったため

何の話をするの?

 色変の話ついでにここ最近競プロやってた話と、パズルや謎解きと競プロとの関係性の話をします。競プロを布教する意もあります

自己紹介

謎解きペンシルパズルをやっています 一年半ほど前から両方あまり触らなくなり、そのかわりに競プロを触っていました
・謎解き製作サークルAnotherVisionに所属しています(何もしていません)
・高IQ団体(怪しすぎ)METIQに所属しています(何もしていません)(東京住みの方いたらご飯誘ってください)
・行列推理BeginnerContestのwriterとして若干参加したり、非言語推理力検定のwriterとして若干参加したりしました
https://nazoac.base.shop/ ←買ってね!)

色変について

 2023/12/17開催のAtcoder Grand Contest 065にてレーティング2400に達し、橙コーダーになりました。

 黄色に上がった頃は橙は通過点という気持ちでしたが、2200付近で停滞し始めた辺りから橙が普通にめちゃくちゃ難しいことに気付いたので今は素直に喜んでいます。
 正直なところOEISエスパーで成功してしまったので(無くても成功ではあったので完全なギャンブル勝ちだとは思いませんが)上振れレートだなとは思っています。落ちたくないのでしばらくRatedは開催しないで欲しいです。

勉強量

ABCとARCとAGC
difficulty別

 過去問の正解数は、レーティングに比べて多すぎも少なすぎもしないと思います。累計1500問近く解いていますね。びっくり
 画像から察せられる通り低難度埋め等はせずに、練習では常に高難易度特攻を意識していました。競プロはレーティングの色毎に別のゲームをやっているという印象があり、上の色になるためには上の色に合わせた問題を解かなければならないと思っています。ただそのせいか考察の途中に出てくる水色レベルの知識に足元を掬われることが多くなったので、最低限の知識対策として最近のABCについてはE以下レベルの問題であっても解法は確認するようにしています。
 あとCodeforcesyukicoderを少しだけ触って足りない知識をちょっとだけ補完したりしていました。Codeforcesのレーティングは2300弱(薄橙)ですが、これはめっちゃサボってるというわけではなくて普通にこのくらいの実力です。英文読解と実装問が苦手です。

何で競プロやってたの?&布教

 元々謎解き勢やパズル勢の色変報告をちらほら見かけていて、自分も触ることで謎解きやパズルの作問の幅が広がったらうれしいなと思って始めた記憶があります。始める前は完全にアルゴリズム知識ゲーだと思っていましたが、そうでもないことに気付いてから時間を割くようになりました。
 (知識要素・考察要素両方について)かなり数学要素の強いゲームだと思います。よく受験数学に例えられますが、あちらは誘導を付けることで意図的に発想を不要にしている問題が多くて虚無なので、それに比べるとひらめき要素が強くて面白いと思います。
 以下に競プロの雰囲気を感じるためのおすすめの問題を2つ挙げておきます。コードに書き起こす必要はないので、是非考えてみてください。
 AGC006-B Median Pyramid Easy
 AGC051-B Bowling

 競プロはコンテスト外で知識を習得し、コンテスト内で持ちうる知識の範囲内に収まっていそうな問題を見つけて考察→実装をするという流れを繰り返すゲームです。
 知識を習得する段階がプログラミング未習者にとってはかなりハードルが高く、正直なところ緑色くらいまではかなりメンタル的に厳しかったです(自分は水色になるまでに飽きて2回ほどやめています)。そこさえ超えられれば競プロでしか得られない重めの考察体験が得られるようになるため、個人的には複雑な持ち帰り謎が好きな謎解き勢やハバネロ研究が好きなパズル勢などに是非おすすめしたい所です。
 (要求される知識量が多い=考察の幅が広いということでもあり、一つの知識を身につけることで解けるようになる問題数が多いということも競プロの魅力です)
 競プロを始めるにあたって、最終的な目標レーティング色を意識すると上達しやすいかなと思います。目標とする色ですが、灰茶緑水青黄橙赤とあるうちの青色(レーティング1600)を個人的におすすめしています。理由として、基本的な知識レベルの上昇で伸びる限界が水色で、そこから本格的に考察問題を触れるようになり始めた辺りが青色だからです。数学得意な人(数オリ予選突破レベル)であれば初めから黄色を目指してもよいかもしれません。

競技プログラミングはパズルの役に立つのか?

(注意:この記事ではパズルと言った際にペンシルパズル、特に競技パズルを指すことにします。競技パズルについて知りたい方は「競技パズルのすすめ」などで検索をかけると分かりやすい記事が見つかります。)

 最上位の競技プログラマーの中に競技パズルに触れている方が不思議と多いことは有名ですが(日本ではsemiexpさんやsnukeさん、海外ではtouristさんやapiadさんなど)、自分のように競プロ最上位ではないもののまあまあ触っており競技パズルも結構やってるよって人は自分の周りでは全然いないので、その二つの関係性について自分視点でお話します。

パズル → 競技プログラミング

 稀にですが、AGC(時にはARC)でクリティカルに役立つことがあります。
 最近の出題例では AGC056-A や ARC152-D 、 AGC061-B 等でしょうか。
ペンシルパズルではグリッド(二次元盤面)上の隣接するマス同士の関係について考察することが多いため、これに慣れていることは非常に大きなアドバンテージだと思います。実際、AGC061-Bの正解者に日本人のパズラーがちらほらいるのを見かけました。グリッド以外でもad-hocな考察問題でパズル力が求められることはちらほらあり、それなりに得している部分はありそうです。
 ただ、競プロのためにパズルを始めるべきかと言われると微妙な所かもしれません。
 最近のAGC・ARCの傾向について、先ほど述べた例を除いて競技パズル力が有利に働く問題が昔に比べて圧倒的に減っているのを感じます(adminが変わった影響でしょうか?)。自分は競技パズル力が生かせて有利だと思って競プロを始めた所もあるので、傾向が変わってしまったのは普通に悲しいです。特にARCについては日本人学生writerが全然パズル側の人間じゃないことも影響していそうなので、学生橙赤コーダーは全員パズルやってくれと思っています。

競技プログラミング → パズル

(より個人的な話になります)
 競技パズルにおいて、深い仮定を打ち止めずに完遂する能力が競プロに触れる前よりも上がったような感覚があります。
 競プロの問題は正解するまで(時には正解してからも)自分の考えが正しいと確信できないことが極めて多いです。そしてARC・AGCでは思考のステップが複数存在する問題が出題されるため、未証明の仮定で言い換えた問題をさらに考察するといったことが必要になります。言い換えた問題のイメージを脳内で保持しつつそれを考察するということはかなり難しく(もっと上手い言い換えを探したくなる・実際に言い換えが誤っていて解けなくなっていることもある)、ARC・AGCの高難易度の問題ではこの能力が問われているなと感じます。こういった高難易度問の練習をしているうちに脳内で解を保持する記憶力・解を切り捨てない根気が向上し、競技パズルにおいても多重仮定が上手くなったなと感じています。
 まあでも未証明の仮定は本当はあまり良くないです。未証明ゴリ押し癖でいつか大きくやらかす予感がしているので、少なくとも簡単な仮定は証明できるように練習をしないといけないなと思っています。

競技プログラミングは謎解きの役に立つのか?

全く役に立ちませんでした 謎解きが競技プログラミングの役に立ったこともないです
楽しめる層は被っていると思いますしあくまで別のゲームとしてなら両方面白いです
謎解き勢に競プロはおすすめだし競プロ勢に謎解きはおすすめです

おわりに

赤を目指す上での知識部分の伸びしろはめちゃくちゃあるのでもうちょっと頑張りたいなとは思いますが、競プロ以外にやりたいことも増えてきて若干熱量は下がるかなという感じです

この記事書きながら行列推理アドカレの解説書き忘れてたことを思い出しました すみません 今度書きます

この記事が気に入ったらサポートをしてみませんか?