tozangezan's diary

勝手にソースコードをコピペして利用しないでください。

今後のプログラミングコンテストへの参加について

みなさんこんにちは。

突然ですが、しばらくプログラミングコンテストへの参加をやめたいと思います。ぜひ記事を最後まで呼んでいただければと思います。

時間との兼ね合い

勝つためにプログラミングコンテストに参加するにあたって、数学オリンピック金メダリストとかでもない人は、どうしても大量の過去問を対策してなんとかやっていくしか方法はありません。それでもまだ努力とは何なのか考えさせられるようなパズルが出題され続け、数学オリンピックの代表候補にもなれなかったような人には大変厳しい戦いが強いられ続けています(筆者は、数学オリンピックの本選に参加するまで必死に対策しましたが、全然解けませんでした)。

ふとここ最近の生活を振り返ってみたのですが、地味に毎日4時間近くプログラミングコンテストの問題を解いていることがわかってきました。毎日数時間というのは一見長くないように見えますが、これが365日ずっと続くと考えると、相当な時間的な負担です。それに加え僕は語学の勉強もしたいし、旅行にも行きたいため、どうしても学業にかけられる時間が限られており、学業に支障をきたしていました。

それなら、なぜ学業に支障をきたしているのにも関わらずレートは伸びないのでしょう。答えは簡単です。同じレート帯の他の人がもっと学業を犠牲にプログラミングコンテストばっかりやっているからです。彼らの情熱は正直言って異常です。常に毎日誰かしらCFでバーチャルをやろうと話を持ちかけてくるし、やれHackerRankだyukicoderだProject Eulerだ、何かしらのコンテストを見つけては片っ端から参加しています。話を聞くに僕が週4回も学校に言っている間、彼らは1〜2回しか大学に行かず、ほとんど研究もしていないということです。この状態で、数学の才能もなく、どうやって勝てというのでしょう。

自分では、やりたいことが多いこと、変に真面目に学業をやるせいで競プロへの情熱の注ぎ具合が中途半端になっていることが原因でなかなか勝てないのだろうと考えました。本当は教授の最大限の妥協を持って修了とすればもっと時間が作れるのにも関わらず、ついつい少しは頑張ってしまい、ある程度の成果を残そうとしてしまう自分が憎いです。

近いうちに卒業したあと、働くか、もしくは働きません。確信がありません。しかしそうなったときに、一体どのようにして競プロと語学と旅行と仕事、どうやって両立しつつ上位に食い込めるのか。僕には考えもつきません。最善は天才パズルを解くことそのものを仕事にすることなんですが、いまだにそのような仕事にありつけていません。

一つの選択肢として考えられたことは、今のうち飽きるほど旅行と語学をやりきり、十分満足した状態で競プロに帰ってくること。暇な時間を強引に作り出し、その全てを競プロに費やすことで、まだ自分でも戦えるかもしれません。一旦競プロの問題に出された問題を解くことから離れて天才パズルの練習(すなわち、数学オリンピックなど)を必死にやることで、新たな問題ジャンルに対応する能力がつくかもしれません(AGCの過去問はAGCには2度と出ないし、断片として使い物になるものすらあるとはあまり思えません)。幸い、実装力は有り余っており、思考の時間(何かを思いつくかどうかなのですが...)だけが問題なので、少しプログラミングコンテストから離れることによって、そういった方向での向上を狙えるのかと思い立った次第です。

そんなに楽しいか?

「解けた」という思いを感じたいことのために競技プログラミングをやっているわけではありません。どうせ問題の大半は「知ってる」か「解けない」なので、そんな気持ちで続く人の気がしれません。IT企業のお金で旅行をすることと、他人を蹴散らして賞金をもぎ取ることが競プロ参加への意義です。これを見ればわかる通り、勝つこと前提の楽しみです。それが今ではどうでしょう。若い人が徐々に強くなってきたこと、僕の得意な傾向のコンテスト(解法は自明で、ただひたすら面倒な問題をやらされる系)が絶滅危惧レベルに減ったことにより、全然勝てなくなってきました。こうすると、辛い気持ちにしかなりません。なぜネガティブな気持ちになるために競技プログラミングをやらないといけないのでしょうか。

語学は、ある程度勉強して満足したら新しい言語を始めても良いし、単語が覚えられないことがストレスになったりはしません。(テストの点数が悪くてなんども同じテストを受けさせられるとかは苦痛ですが)。その点で楽なのではないかと思っています。

競プロ勢以外と会話が全然できなくなった

競技プログラミングをしていない人、もしくはしている人であっても競技プログラミング以外の生活もある人が、一体何に興味を持っているのかもわからず、何も共通の話題がないため、全く会話ができません。問題の解法や競プロ勢に関するトーク以外の仕方を完全に忘れてしまいました。

この状況は語学の勉強にとっても大変マイナスです。口をひらけばプログラミングコンテストの問題の解法の話しか出てこない。Um_nikの面白ブログ記事の話しか出てこない。そんな状態だと、フランス語やタタール語の会話相手と30分過ごす間で必ず話題がつきます。何か質問をもらって答える方式でも、答えが競プロ関連の話題しか出せないので、詰みます。

もう少し、普通の人間が一体何をして生活しているのか、それを学んでみたいです。まずはAtCoderでいうレート50くらいの認識、あわよくばレート3桁程度に競プロ以外の話題への基本的な知見を深めることで、なんか会話ができるようになりたいと思っています。

どこかでAtCoderから引退しないといけない時がくるはず

正直、日本に残ろうと考えていません。人が多すぎるのが嫌なので、どうしても東京をはじめとする日本の三大都市圏で生活したくないです。その一方で僕でもなんとか生きていけそうな界隈(IT企業でも、そうでない場所でも)というのは日本だと東京にしかなく、この時点で詰みです。(完全リモートで田舎に住むことも考えられますが、完全リモートの仕事をTwitterで探しても何も見つかりませんでした。)

多くのIT企業は西海岸に集中しており、西海岸では時差が16~17時間あるため、AtCoderのコンテストが開始される時間は、アメリカ西海岸では4~5AMとなります。さすがに生活に無理が生じるので出られないなという気分です。実際バンクーバーに居た間はCFには出ましたがAtCoderのコンテストには出ていません。

東海岸だと7~8AM、ヨーロッパでは昼過ぎ〜夕方なので出られることを考えると、日本から出た途端にやめるとは限りません。しかもまあ、AtCoderAGCの問題が尽きるのが先かもしれませんしね。ということでAtCoderへの参加からは何かの形で離れる気がします。

安心してほしいこと

開発とかマラソンとかは決してやらないので安心してください。

おわりに

またプログラミングコンテストに参加しに戻ってくるので、その時はどうかよろしくおねがいします。



来年1月ごろ復帰予定です。



ところで、

www.hackerrank.com

明後日1月2日はNew Year Contest 2020やります。ぜひ参加して新年の貴重な24時間をドブに捨ててもらえればと思います。