橙になりたいaquarium

にゃーんにゃーんにゃにゃーん

競プロ始めて6年、知らないうちに黄色になってました

この記事は競プロ Advent Calendar 2023 の 9 日目の記事として書かれました。

この6年間の話を、まとめる機会がほしいと思って、書かせていただきました。

↓ これよりも自分語りをすることが目標です。

leaf1415.hatenablog.com

目次

自己紹介

大阪大学工学部B4の shinchan (@Sophia_maki) です。

さて、本題に入ります。

競プロを始める前

高専・情報系に進んだきっかけ

高専・情報系に進んだきっかけは簡単に言えば、数学好きで国語嫌でセンター受けたくなくて、阪大に行く最適ルートは高専からの編入だと考えたからです。

私がいた明石高専には、機械工学科・電気情報工学科・建築学科・都市システム工学科の4学科があります。機械か電気だなぁと思ったあと、高専の先生に数学がしたいなら電気だと言われ、友人にも「数学なら情報系」と言われたのがきっかけでした。

↓ 具体的にはこんな感じです。

なお私は、中学の時点でpcについてはwordが使えたり高専のこと調べるのに使ってたくらいで、プログラミングとかは高専入ってからでいいやーって思ってました。スマホは中学卒業時に買ってもらったため、SNSも使ったことがなく、「アカウント」とか「ログイン」という概念も知りません。

中学までの学力面は、数学力はわりとあったので、田舎の公立中(学年66人)で2位以内に入ることに困ったことはないくらいです。中3のときに「下剋上受験」というドラマを見て中学受験の存在を知ったくらいには過疎ってて、都会のことや科オリとか競プロのことは知らなかったです。数オリはサマーウォーズで知ってたけどオリンピックと言うんだから大人がでるものだと思ってました。

中学の暇だったときにこういうことをもっと知れたらなぁとは今でも思います。

0年目(高専入学後)

私は意識だけは高かったので、上記のような世界があると知ると、いろいろ始めようとしました。

しかし、例えば英語を勉強しようとしても、今まで勉強をほとんどしたことがなくてやり方がわかりません。暗記科目は特に苦手でした。数学はもともと自信があったのでなんとかはなりましたが、例えば f(x) という表記に数ヶ月つまづいてました。

クラスメートには例年よりもすごい人が揃っていて、IPA資格史上最年少5つ持ちなんかがいました。

彼らを中心にして AtCoder がクラスで流行り始めました。多いときで毎週10人くらいが参加してました。登録するだけなら30人くらいしてるかもです。

この頃私は、「ものづくりに興味がない」ということに気づいてしまいました。高専生なのに?

いわゆるWebページの開発とかそういうものを、やってみたいとは思いつつ、多分それは自分がしたいことではなかったと思います。

そんな中、弊学ではCTFや競プロが流行っていて、自分もプログラミングを趣味でやりたいと思って、クラスメートにエディタのインストールやらいろいろやってもらったのですが、結局なにがなんだかさっぱりでした。何かしらのツールを自分でインストールすることすらできなかったです。

授業でもプログラミングが始まり、毎週クラスメートに教えてもらってなんとかついていってました。githubを使う課題があって「ログインってなんだろう」って思ったのを覚えています。

さて、数学ならいけるだろうと、1月の数オリにノー勉で特攻したところ2問しか解けませんでした。ようやく、AtCoderを始める決断をしました。高1の1月下旬にクラスメートにアカウントを作ってもらってスタートです!

1年目

茶色になるまで

初めてでたコンテストは確かunratedで、0完でした。ratedにでると、C言語でなんとか1問解けました。B問題すらわからない頃は、寮でもクラスメートの部屋で過去問の解法を教えてもらっていました。初めは人に教えてもらわないとわからないですよね。なぜ初心者プログラマは自分で調べようとしないのかを考えてみました。

  • 英語の記事が多くてわからない(翻訳に通してもわからない)

  • 専門用語多くてわからない

  • インターネットで調べるだけなのは悪だと教えられてきたのを「インターネットは悪」だと解釈し、学問(プログラミング含む)とインターネットは完全に切り離さないといけないと認識している(私の場合)

レートが600を超えるまでは言語はPythonとCとC++をいったりきたりしていました。授業で習うのはC、クラスメートがよく競プロで使っているのはC++、よく教えてくれるクラスメートが使っていたのがPythonだったからです。

さて、この頃の灰色というのはratedに出ればレートがあがります。Cの文法を学んでコンテストの復習をしていたくらいで、数ヶ月で茶色になりました。

茶になる直前の画像を発掘しました。アイキャッチ画像用。

緑になるまで

高2になりました。灰色の頃使っていた環境は、コンパイラコマンドプロンプトminGWを使っていて(これもクラスメートに入れてもらった)、エディタはatomだった(これもクラスメートに入れてもらった)と思います。

茶になってからは先輩にWSLを教えてもらって、エディタもsublimeになりました。WSLは先輩のサポートでなんとか入れて、sublimeは自分でなんとか入れることができました(成長)

さて、レート600の頃、停滞したのでちょっとした精進として、3日間でA問題やB問題を100問ほど埋めたりするとレートはまた上がり始めました。また、言語もC++に固定しました。

なにかプログラミングに関連したものに参加したいと思って、高専プロコンの課題部門に出たりしました。ひたすら足手まといと雑用をしました。JOI予選はおちました(クラスメート4人通過しててすごい)。

あとは基本情報を受けました。一緒に受けた3人は全員受かって僕だけ落ちました…。午前は勉強してさえ取れるのですが、午後は国語力がなくて全然取れませんでした(午前65な時点で勉強不足ではありますが、午後35…)

数オリは高2のときが一番惜しく、あと1点でした。多少は勉強した。

緑になった。

この頃の心境

競プロをやっていたのは、なにかに役立つとは思うものの、競プロだけではやっていけないとはかなり感じていました。まだクラスで競プロは流行ってはいたものの、競プロは役に立たないという意見は身の回りにもけっこうありました。

そんな中でも競プロを続けられたのは、「競プロを辞めたところで自分が他になにか始めるわけではない」ということを自覚していたからです。競プロのいいところは他の情報系の分野に比べて始めやすいことだと思います。興味自体もそうですが、難易度的に自分のレベルで競プロ以外のものを続けられる気がしなかったです。基本情報も高専プロコンも自分がなにかできるわけではなかった。せめて、自分の数学力が生かせる競プロなら、と思ってこれ続けられなかったら電気のコースに進むしかないと思いながら続けていました。

知り合った強い人

当時競プロerは校内しか知り合いがいなかったのですが、どんどん校外に知り合いが増えていきました。クラスメートに水コーダーはいた(4つ上に橙がいたらしいですが…)。

春には青コーダーのたつやんさん、夏には黄色コーダー(現橙)のこたまねぎさん、秋には橙コーダーのけんちょんさん。

正直青以上は宇宙人だと思っていました。夏に会った高1で青の女性もなかなか衝撃でした。

2年目

水になるまで

2年の終わり頃、クラスメートに本を借りたりしながら、プログラミング言語をいろいろ触ってみた記憶。java, ruby, kotlin, C#くらいですかね。正直、「kotlin実行時間遅いなー。C#javaはコード長くていやだ。rubyは、なんか、嫌だ」という感想でした。

初めて技術書を買ってみました。kotlinでandroidアプリ開発する本です。1/3くらい読んで挫折してしまいました。

高3の最初の数学のテストで、クラス1位になることができました。競プロのおかげで数学力も上がってきていることが実感できました(テイラー展開とかの範囲なので関係ないかもだけど)。また、緑になると、「自分は競プロerである」とはっきり考えられるようになりました。高3にもなると思春期的なものも終わりかけて、自分に自信が一番あった時期かもです。codeforcesも始めました。


精進に関しては、水になるまでは茶のレート600付近での精進や日々のrated以外は精進の記憶があまりないです。そうこうしてたら水になりました。

もしかしたら事実と異なる記述があるかもしれませんが、以下の記事の方が多分合ってます。

shinchankosen.hatenadiary.jp

水になってから

この頃になると競プロを続けているクラスメートは5人くらいになってたと思います。私はというと、水になったはいいものの、青パフォ以上を出したことがないので緑のときに比べて自信がなかったです。そうこうしてたらabc140で運よく黄パフォを出すことができました。

atcoder.jp

この直後にはPCKがありました。校内からは2チーム出ており、残り10分までは勝ってたのにそこから抜かれてしまい、校内制限で通過できませんでした。またしてもオンサイトに行けず…。

この時期はかなり忙しかったです。私は入学当初から、以下の3つの団体に所属していました。

  • 吹奏楽部 : 週6なので一番重い

  • 棋道同好会 : 将棋とかのボードゲームやる。3年のときは部長だった。

  • 数学研究会 : クラスメートと入学してすぐ立ち上げた。副部長と会計やってた。

あと忙しかった原因といえば、明石高専生なら「おしろ」と言えば伝わるだろう。某レポートやら、他にもレポートに追われていて高専生っぽい忙しさだったと思う。

そんな感じで精進はあまりできず、ただ、数オリの勉強はしていた。今年こそは本選に行きたかった。行きたかった…。

落ちた。帰りに連れと一緒にカラオケに行って叫びまくって、「もう自分には競プロしか残ってないんだ」と感じた。その日から極度精進を始めた。

3年目

青になるまで

そんな中、某コロナがきた。春休みは1ヶ月伸びて2ヶ月になり、結果的に7月にオフライン授業が再開するまで部活も停止。

開いた時間で毎日問題を解き続けた。休みの日は平均して10時間、実家からのオンライン授業だったので授業中もひたすら競プロして、平日も6時間くらいやった。

青になったとき、思わず叫んでしまった。

shinchankosen.hatenadiary.jp

青になってから

まずはICPC。学内1チームで黄色がいるのでそれはそうなのだが、通った。

shinchankosen.hatenadiary.jp

しかし、またしてもコロナによって、オンサイトに行くことができなかった。

shinchankosen.hatenadiary.jp

この頃たぶん「そろそろ自分にもできるんじゃないか??」と考え、機械学習に手をだした。「ニューラルネットワーク自作入門」とかをやったり、kaggleのtitanicをちょっとだけやった。でもそこからが難しくて結局ここでもなにもできなかった。

精進はというと、青になってからしばらく休んだ。5か月間の極度精進に終わりを告げ、編入試験応用情報の勉強を始めた。

応用情報は落ちた…。午前72、午後50とかだった…。クラスメートにも、「これは国語でしんちゃんに向いてないから競プロだけやってればいい」と言ってもらった。でもさすがに、某クラスメートが小6で最年少合格してる試験に大学1年の青コーダーが落ちるのは、かなり悲しい気持ちがあった。

AtCoder青より応用情報の方が難しいよ。まじで。

すっかり精進から離れたものの、競プロキャンプに行ったことで変わった。ちょっとフライングするけど入黄記事の中で、私が青になってからも精進を続けた理由が書いてあったので紹介します。コンテスト・精進のところに諸々が書いてます。

shinchankosen.hatenadiary.jp

tozangezanさんがyoutubeの概要欄に書いていた、「競技プログラミングよりも役に立たないものの例として、競技プログラミングが役にたつかどうかというくだらないTwitter上の議論に何時間も参加することが挙げられます。あなたが競技プログラミングが役に立たないと言っている人に対して役に立った例を探してきてリプライしている時間に、本当に強い競技プログラマーは問題を解いているのです。」

のいみさんに競プロキャンプで言われた、「目の前にRatedがあるのになんででないんですか?」

これらがなければ青で満足しきって競プロをやめてた可能性が高い。

4年目

この時期はさすがにクラスも編入一色。精進はしたいけどできない状況。我慢できなくてGWあたりにTechFulに手をだして3日間ひたすらやり続けて総合ランキング3位とかまで上がった。

編入は現在通っているところに合格。入学時の成績からすると、阪大に合格できたのは競プロのおかげだなぁと今でも思います。高専数学とか電気系の専門科目とか、直接関わる分野はないけれど、数学力という点においては共通していて、ここが鍛えられたことは競プロのおかげです。

編入試験が終わるとまた競プロは再開。Highest1998まで行ったのに黄色になれなかった…。

そういえばICPCはひっそりと落ちました。

後期になって、兄の紹介でとあるweb系のアルバイトをした。技術系のアルバイトをなにかしたかったところ、運よく拾ってくれるところがあったからである。

Ruby on Railsが生理的に受け付けなくて仕事1つしかしないままフェードアウト…。。

5年目

卒論の時期はさすがに競プロはしてなかった。

大学編スタート。

某量子バイトもスタート!!

黄色になりたくて、精進は続けていた。でも編入なので2年の授業ととらないといけなかったりでうまく時間が取れない面もあった。

明石から一緒に編入した3人でICPCにでてもちろん落ちた(青・青・水)。



夏にはDDCCに出た。24卒枠でなんか通ったが、初オンサイトでウキウキ。

shinchankosen.hatenadiary.jp





それと、インターンに行きました!!!!

AtCoder Jobsにもある田町にある高速化で有名なF社です。競プロが実務に生かせるということが実感できてますます競プロに熱が入るきっかけになりました。ただ、どこにいってもgitは必要だなぁと感じ、ライブラリをgitで管理し始めたのはこの頃からだったかも。

さて、、、












黄色に、、、なりました!!!!!!!!

shinchankosen.hatenadiary.jp

6年目

黄色になってから

トヨタコンの決勝に参加しました。大した結果はでてないのですが、懇親会や大宴会で話しかけてくれる人が多くて気持ちよくなったりしてました。

shinchankosen.hatenadiary.jp

今でもいろんな人が「え、黄色????就活つよつよじゃん!!!!」と言ってくれて正直けっこう気持ちいいです。


ICPCは3年ぶりのRegional!!!!

shinchankosen.hatenadiary.jp

shinchankosen.hatenadiary.jp



黄色になってからは解説を書いたり、作問もちょっと増えてきました。作問は全然少ない方ではあるのですが、OUPCなどでどんどん放流していきたいと思ってます。

shinchankosen.hatenadiary.jp


直近の話

さて、話は変わります。研究室選びです。基礎工学部ではなくて工学部なのであまり競プロっぽい研究室はほぼありません。また、この頃は就活のことを考えたりしていて、Jobsを徘徊したり、career design dayに参加したりしていたのですが、Web系と機械学習系に対極しているのでは?と感じるようになります。「Webはもう嫌だし、機械学習だとちゃんとやれば自分に向いてるかも」と思ったり、いもすさんとか秋葉さんみたいな「競プロと機械学習両方強い人」にあこがれを感じ、機械学習にちゃんと手を出してみようかな?Kaggleもちゃんとやろう。と思いながら、第二希望ですが現在の研究室で機械学習をやっています。競プロ単体で一生食べていくのは危険だと思ったのもあります。

また、「kaggleやるんならAHCもできなきゃだめだろ」と思ってAHCに出始めました。なにもわからないので緑パフォを連発していたのですが、運よくトヨタAHCに通ってしまいました。インターンでお世話になった方に挨拶ができてよかったです。

shinchankosen.hatenadiary.jp

サンダー本は一応読んだのですが、その後も運ゲー貪欲を重ねて青になりました。まじでありがたい。

機械学習自体に対しての動きなのですが、関西Kaggler会に参加したり、東大松尾研がやっている GCI をするなどしています。Kaggle自体はまだ始められてない…。でも始める準備は整ってきてる…!



そんな感じで、機械学習にせよ、gitにせよ、競プロ以外のものは競プロから徐々に広げていける方向だと身に付けられるそう、というかそうじゃないと挫折するだけだとわかった。

また、この界隈にいたり大学で勉強するだけで、それに伴って競プロ以外の知識もついてくることはあるので、いろんな分野の基盤が固まってきたのかなとも思いました。

webとか機械学習とかって競プロとの大きな違いは、ファイルが複数あってごっちゃごっちゃしててよくわからんことですね。競プロって1ファイルで完結してしまうのめっちゃいいですよね。

それはそうと、アルバイト・長期インターン・春インターンなど、機械学習の方面でjobsから申し込めるとこにしたいと思いつつどうしようかなーというのが直近の迷いです。


てか最近のAIやばくないですか??競プロ一生続けるとかは言ってられなくなってきました。さすがにICPCにあと2回出れるので学生のうちは続けるとは思うけど…。競プロという一つの宗教から目が覚めたという意味ではいいかもしれません。将来がますますわからなくなりそうですね。

↓ こういうことをいつも考えてはいるものの…。まぁ働き方という面では変わらないのかな。どういう職につくかはかなり影響がでそうです。

まとめ

かなりダラダラ書いてしまったので言いたいことだけまとめます。母数N=1なので共感・否定の意見待ってます。

  • 情報系に行きたいor来てしまったけどものづくりに興味がないなら競プロを始めろ

  • プログラミングをやりたいけどなにがなんだかわからなくて進まないならとりあえず競プロを始めろ

  • 基本情報や応用情報を解いて無理だと思ったら競プロを始めろ

  • 緑になったらある程度自信も出て楽しいと感じるようになるからそこまではがんばれ、大丈夫、情報系ならどの分野でも緑はあった方がいい。

  • 「自分にはこれしかない…」と感じたものを大事にしよう。継続しよう。

  • いきなり違う分野に行ってもわからない。得意なことや今までやってきたこととの共通点を探して広げる方向で精進しよう。

  • それでも無理なもんは無理だと思う。今は無理で諦めてもいいと思う。その分野が得意な人が身近にいたり、結局大学で最低限度やらなきゃいけなかったりで、なんやかんや知識は少しずつ身についていって、数年後には、できるようになってることがある。

  • gitはやっといた方がいい。ライブラリの整理とかから始めよう。

あとがき

このブログの名前は「橙になりたいaquarium」です。まだ茶か緑の頃、ラブライブサンシャインの「恋になりたいaquarium」をもじって「橙になりたい」ってしてみました。もっとも、そのころは「行けて青」だと思ってましたが。でも、codeforcesは橙で、AtCoderもいつのまにか黄色…。かなり現実的になってきました。学生のうちには間に合うかわからないけど、将来的に橙はいけそうだなーという感触です。赤はわからないですが、赤にもなるとそれこそ、こっちの道に骨をうずめるしかないですね。

追記

まとめの後半で無理なもんは無理だとか言ってたんですが、補足をさせていただきます。

自分も競プロを始めて最初の1年間はあまり楽しいと感じませんでした。楽しいから続けられるはそれはそうなのですが、気持ちはどうであれ継続してみることも大事だと思います。数年やってたらある程度のレベルにはなるはずです。業務とか学業で義務化されるのがこれにあてはまりそうです。

ところで自分語りが足りなかったと思うので学業の方面について補足させていただきます。

「自分には競プロしかない」をわりと強調してしまってるかもなんですが、自分は(高1のときを除いて)学業が崩壊していたことはないです。

競プロのやりすぎで学業に支障の出ないようにはした方が良いです、あたりまえですが、、。とはいいつつ、競プロ関係の記事を読んで理解するだけでも、特に専門科目や理系科目で新しいことを理解しやすくなります。競プロは学業の役に立ちます。(じゃないと僕が阪大なんか受からないだろ、という気持ちでいます)

学業が崩壊しない程度に精進がんばりましょう…


最後にはなりますが、ものづくりは今でも興味あまりないです。数学とかアルゴリズムによる高速化とかがまったく絡まない分野の開発について、手を出してみるものの長く続かないがちです。数学やアルゴリズムをやるための手段としての開発は全然やっていきたいです。じゃないと競プロも実装という工程がある以上続かないし。




お知らせ

OUPC来てね!!!!!!!!!!!!!!!

connpass.com