この記事は東京工業大学デジタル創作同好会traP アドベントカレンダー2019の12/4の記事です。
つかみ
こんにちは、12/4に記事を書くことに定評があるhukuda222です。
12/4は香風智乃ちゃんの誕生日です。おめでとうございます!
ところで、智乃ちゃんの色のイメージは青だと思うのですが(髪は水色系ですが、まぁ制服とか青ですし)、先日僕のAtCoderのレートも青くなりました。そんなわけで、界隈恒例の「*色になるまでにやったこと」っていう記事を書こうと思いました。
先日って書いたんですが、今調べたら今年の7/21でした。この後一回水色に落ちてかなり停滞してたので青パフォが比較的安定してきたのは最近です。
……嘘です。直近三回でレートを90くらい落としました。誤読と誤解と後から考えるとなんでそんなことしたかわからないミスは、265日くらい1日1ACした程度ではなくならないみたいです。
AtCoderとか競技プログラミングってなんやねんって方は、今年の新歓プログリレーでサークルの方が書いた記事を見ると良いと思います。
僕の競プロの歴史
僕の競プロ歴は休止期間がかなり長く、
-
大学入学前に、このサークルの先輩からAtCoderを勧められて競プロを始める
-
大学一年生の夏くらいに緑になるものの、そこで停滞して引退する
-
大学二年生の初夏くらいにちょっとだけ復帰して夏に引退する
-
大学三年生の春頃に復帰して、たまにコンテストに出たりするようになる
-
DDCC2019の20卒枠に補欠の補欠の補欠くらいで滑り込み(432位)、本戦に参加してモチベをちょっとだけ回復する
-
今年の3月の中旬にサークルの後輩に次々とレートで抜かれるのに危機感を感じ、1日1ACと「参加できるAtCoderのratedコンテストは全て参加し前から解く」をやるようになる
-
ICPC2019予選やTTPC2019(東工大有志主催のオンサイトコンテスト)に参加したりしながら、今に至る
と、引退が多いです。
1日1AC
1日1ACというのはその名の通り、毎日競プロの問題を1問以上解く、という試みです。
やる前のレートは緑だったのですが、そこから青になれたのは、9割くらい1日1ACのおかげだと思っています。
current streak
Atcoder Problemsという非公式のサイトでは、AtCoderユーザーの色々な情報を見ることができます。
その情報というのは、解いた問題の個数であったり、解いた問題の点数の合計であったりするのですが、
その中の一つに"current streak"というものがあります。
これは現在何日間継続して1日1ACしたかを表しており、これを眺めるのが1日1ACする上で大きなモチベになりました。
また、少し前にstreak rankingという機能が実装されました。
200日以上AtCoderに絞って1日1ACするユーザーはあまり多くないので簡単にランキング上位に入ることができます。
AtCoderのユーザー数はおよそ11万なので、そのなかで35位と考えるとめちゃくちゃすごい気がしてきます。
(残念ながら、longest streakはその人の競プロの能力を全く保証しません)
このランキングのいいところは1日1ACをやり続ける限り順位は広義単調増加する点です。
つまり、レートが僕より遥かに高い人であっても、僕よりもlongest streakが少なければ、僕がやめない限りずっと僕の方がstreakの順位が高いのでマウントが取れます。(絶対取りませんが)
レートが下がるとモチベも下がりますが、ランキングは単調増加するのでモチベが下がりにくいです。
やる問題の決め方
とりあえずABC-D、ARC-Bを埋めましたが、そこから毎日の解く問題に悩むようになりました。
そこで、先ほど紹介したAtcoder Problemsで、ユーザーに合わせて適切な難易度の問題を推薦するRecommendationsという機能を見つけます。
難易度の選定は割と正確で、配点が高くてもできそうな問題や、配点が低くても難しい問題をちゃんと推薦してくれました。
これで2ヶ月くらいは凌いでいたのですが、僕が解ける確率が80%~20%の推薦される問題をほぼ解いてしまったので、ここからどうしようか迷っています。
時間がないときは、有志コンなど現在のシステムでは推薦されない良さげな難易度の問題をやり、時間がある時は解ける確率が20%未満の難しい問題を解くことになるのかなぁと思います。本当は別のサイトの問題をやるのが良いとは思うのですが、current streakに反映されないのでちょっと尻込みしています。
虚無埋め
ここでは、ABCのA-C(初期のCは除く)、AGC-A、他コンテストの最初の1問目あたりを解くことを指しています。
賛否両論ありますが、僕は基本的にやりませんでした。
外泊などで忙しくて時間が取れそうにない時などにcurrent streakを繋ぐために解いていました。
その他いいこと
コンテスト参加への抵抗が減った
1日1ACする前は「今週問題あんまり解けてないから、コンテスト参加するのやめようかな、どうしようかな」ってコンテスト前に毎回悩んでいたんですが、初めてからは脳死で出れるようになりました。
1日を振り返った時に頑張った感を得られる
誰しも、長期休暇中の特に何も予定がなかった日の夜に「あれ今日1日何やったっけ?」ってなることあると思うんですが、1日1ACをやっていると「そういえば、この問題を解いたんだった」というささやかな肯定感を得ることができます。
日記のネタになる
僕は日記を毎日つけているのですが、基本的にあまり書くことがありません。しかし、1日1ACをすることによって、どの問題を解いたかで確実に1行は書けるようになりました。
悪いこと
タスクが多いと辛い
研究や講義の課題、他の趣味などやることが多い日は、気づいたら1日1ACせずに23:30、みたいなことも何度かありました。
詰まって時間が溶けるのが週2くらいある
毎日30分くらいで一発ACできればいいんですが、1時間考えて、解答を見てから1時間考えてなお通せない、というのはよくあります。
こういう時、誰かのACしたコードとけんちょんさんのブログにはすごくお世話になりました。
(writerによっては解説に実装コードを載せてくれる方もいて、とても助かっています)
冷えるときは冷える
1日1ACしても、コンテスト以外ほとんど解かなくても、あったまるときはあったまるし、冷えるときは冷えます。
せっかくなので、冷えたコンテストの後にしないほうが良いことを自戒の意味を込めて書いておきます。
スマブラ(リアルタイム操作のオンライン対戦ゲーム)
トレーニングモードで練習するとかなら良いですが、オンラインマッチは絶対にすべきではありません。100分~180分もコンテストに取り組んで疲れている上に、冷えて精神的負荷を受けていると普段のプレイは全くできません。僕はこれで戦闘力をVIPから50万くらい落としました。
youtube(動画配信サービス)
冷えて精神的負荷がかかっている状態だとゲーム実況やMADなどを無心で長時間見てしまう傾向があります。土曜日なら日曜日の午前中が消えますし、日曜日なら月曜日の一限をひどいコンディションで受けることになります。
僕は一度も実践できたことはないですが、できなかった問題のできなかった原因を確認してすぐできそうなら通し、すぐには無理そうなら明日やることにして、さっさと寝るのが良いと思います。
まとめ
競プロは人と競う側面が大きいので、色々疲れやすく引退しやすい傾向にあります。
僕は引退したくなったり引退したことも多いのですが、難しそうな問題が解けたりレートが上がる分には楽しいので、やめたくなったり実生活が異様に忙しくなったりしなければ、趣味の一つとして競プロと1日1ACは続けようと思います。
競プロ始めたばかりで、早くレート上げたいって方は1日1ACをやってみてもいいかもしれません。
最後に言いたいんですが、こういう記事は上振れた直後に書くべきだなと書きながら思いました。(智乃ちゃんの誕生日は変えることができないので、どうにもなりませんでした)
なんか技術的な記事を書こうと思ってたのですが、講義や論文や剣盾で忙しかったので報告っぽい記事になりました。来年はまだこのサークルにいるはずなので、来年も智乃ちゃんの誕生日を祝うべく12/4に記事をかけるといいなぁ、と思います。
明日、12/5は0214sh7くんの記事です。お楽しみに。