「楽しく競プロを遊びつくそう」という色変記事(緑になりました~!)

初記事・色変です!(やった~!)

「英国に行きたい!」と思った結果海外受験真っ最中のあぴ (@Apiros3)です。

多忙に追われる現実からの息抜きのためにC++と競プロを続けてはや2ヶ月、入緑したので何か形を残すために記事を書くことにしました!

入緑の図(コンテスト初参加からは1か月半くらいでした!)

 

話したいこと

競技プログラミングには、様々な楽しみ方があると思います。

そしてこれは自分の解釈なのですが、より長い間、より密度のある楽しみ方をした人が「競プロ」をネットゲームとして最高に嗜めているのかな、と思っています。

ネトゲ廃人様の賢明なお言葉

 

レートを上げることを目的に学び、精進を積み重ねて色変する方もいますが、この記事ではそれとは別の角度から競プロを楽しみ、レートもついでに伸ばす、という考えについてお話していきます!(つまり自分が今のところ競プロのここが楽しい!って思ったことについて語るだけの記事です)

 

 

自分なりの競技プログラミングの楽しみ方

自分にとって、競技プログラミングの一番楽しい部分を簡潔にまとめると、

「自分にとって絶妙な難易度の問題を、ACする」

ことだと思っています。

ついでに言うなら、考察部分で「え!?この解法天才じゃん!」って自分に思える問題だとより楽しみが増します(ただ、解説に自明であるかのように書いてあることがしばしば…w)。

考察が合ってると確信する瞬間

そして、これをレートを賭けて挑んでいるコンテストの時間内にACできる瞬間が、もう言葉で表せないくらい楽しくて大好きです。脳内麻薬で溢れます…!!

テストケースが灰色のWJのまま進んでいき、ACが近づいてくるのを実感する瞬間、難しい問題ほど緊張するからこそ、ACした瞬間が余計嬉しいです。

脳汁ブシャーの図

そんなこんなで、自分の競プロの一番の楽しみ方は、レートに集中したものではなく、とにかく一問一問を楽しみ、ACできる瞬間を大事にする、というものです。

実は一度色変が見えたタイミングでレートを気にして参加したことがあったのですが、緊張するし、順位も気になって問題に集中し辛かったです…

パフォーマンスが揺れすぎてウズベキスタンの国旗みたいになってる図

楽しみ方はそれだけじゃない!

解ける時以外にも競プロの楽しいは色んな場所に潜んでいます!

例えば、やっぱり難しい問題もあるので、解けない時だってあります。その時の「悔しい!」という気持ちと、しっかり解説から学ぶことで次は解けるようにする、という成長のプロセスを体感することも楽しいです!

知らないアルゴを使わないと解けない問題に挑む様子

 

そしてたまには今集中しているアルゴから離れて、寄り道程度に少し気になっている新しいアルゴリズムや、勉強してみたいと思っていたものに触れるのもいいですね♪

最近だと、

・分数の逆元

・確率的な素数判定アルゴリズム

みたいなものに触れてみたりしました!

発想が凄すぎて、アルゴリズムの凄さに感動しながら学んだりするのってやっぱり楽しいですね。

↑ミラーラビンについて教えてもらった時、教えてくれた側まで関心している様子を完璧に捉えたツイート

 

他にも、自作ライブラリを作ってみたり、出力までの時間を図るようちょっとした手入れをする時間も凄く面白かったです。

こういうちょっとした部分も含んで、競プロって楽しめるものだと思っています。(その点、実は初心者であるほどこれから楽しめる範囲が広いので得かも…!?)

後は色んな言語に触れてみる機会でもあります!自分の場合、名前が好きで.bf(Brainfuck)という言語に触れてみました!(凄く頭が痛くなる仕様の言語ですが、解ける問題に遭遇した時はパズルを解いてる感じが楽しい言語です!)

.bfで"Hello World!"と出力するコード

 

あとは、何問か頭の中に保存しておいて、移動時間などで考察する、みたいなのも一日中遊んでる気分になってとっても楽しいです!

 

なので多分、自分にとって競プロが何かをまとめると、以下のようになるのかな、と思っています!

とにかく、競プロって本当にどの部分を取っても楽しいんですよ!それは学びの部分だったり解いてる瞬間だったり、気まぐれ程度に覗いてみたアルゴリズムに感動する瞬間だったり、どれも本当に大好きです!(ただ今は、ここにレートや競技感を加えすぎると疲れちゃうのかな、って思っています)

 

でもレートが気になる、というあなたへ!

この2か月で痛感したのは「レート≠実力」という点です!

レートが下がったとしても、新しい問題が解けていたら確実に実力はあがっていて、まだレートにそれが反映されていないだけな気がします。レートが伸び悩んでいても、新しいアルゴリズムを学んだり、Diffが低い問題でも初めてのACなら、確実に実力は上がっているし、ACできる可能性が広がっている分競プロを楽しめる範囲も広がってる、ということです!(すると、長期的にレートはついてくる!というのが持論です)

 

なので、「色変するために何をやったか」と言われると、とにかく楽しい難易度の問題を解きまくって、新しいアルゴリズム武装する、の繰り返しです!

本当にそれだけなの?って思った人へ @microkentsさんの画像です

正直、今のところ息抜き目的でやってる競プロなので、これくらいのゆっくりと気まぐれに楽しみながら学べる感じが一番今の自分に合ってる気がします。

 

というわけでもっと競技プログラミングを楽しむ方法(おふざけ)

拡張機能で遊んでみる

皆さまはGreasyforkでどのような拡張機能を使っていますか?レートPredictorだったり、難易度を表示してくれる機能など様々ありますが、個人的なおすすめはこちら!

AtCoder-ngtkanaResult

ACやWAが全てながたかなさんの言葉になります…!

たまにオンにするのが楽しいプラグイン

そして、コード内を少しいじれば自分の好きな言葉に変えることも出来るので結構純粋に好きな拡張機能です!

 

とんでもない問題を解いてみる

「なにこれ?」ってなるような問題を解いてみたい方はぜひこちらなどをお試しください!

J - Go to Heaven

こういうコンテスト、いいですよね~!(次ある時参加してみたいな…!)

 

エンカしてみる

競プロerとのエンカ、超!楽しいです!(本当にいい方達に出会えたんだな、という気持ち)

多方面で色んな方たちと繋がって、直接会って話すの本当に楽しいです!あと美味しいご飯を食べる言い訳にもなったりする…!

20歳未満なので自分は飲めないのですが、みんなが徐々に酔っていくのを見るのが結構好きで、その状態で競プロの問題を解こうとするのを見てるのとか楽し過ぎました(ちゃんとほぼみんな解けるのが凄すぎる)。あともしかしたら自分…場酔いし易いのかも…?

 

謎の持ちネタを作る

C++に質量はありません」(以下割愛)

ボボボーボ・あぴの日々

最後に

競技プログラミングはその名前の通り、競うものです。ただ、個人戦の競技は己との戦いでもあります。自分を高める以上、そのプロセスや出会いなど全て丸ごと楽しんだ方が得なのでは!?と思ったりしたのでした。

息抜きの気分で、楽しく学んでいくのが成長するにおいて重要なのかな、と思ったりした入緑記事でした。成長速度は人それぞれなので、気長に楽しい競プロライフを送りましょう!

最後に、AHCのおかげで銅diffをACしたことになってる図

 

P.S.競プロに興味を持つきっかけとなったE8さん、そして「Ratedで出ましょう(圧)」と押してくれた(?)ゆうさん、オットセイのしのさん、そしてここまでのめり込める日々を作ってくれたTwitterやごーすとたうんのみなさまに感謝です!

 

ご精読ありがとうございました~!!

 

参考:

作り方が分からなかったので後から足します!