chacoderのブログ

競技プログラミングそのほか

AtCoder  緑色になりました!【色変記事】

f:id:chacoder:20200920003717p:plain

このたびめでたく緑化することができましたので茶色に落ちないうちに色変記事を書きます。

ハンドルのChacoder(チャコーダー)ですが茶色コーダーという意味ではなく、地元の名産のお茶からとったものです。それゆえ緑化してもChacoderのままです。

0 自己紹介

  • 50代半ばです。
  • 本業は弁護士です。
  • 競プロを始めたのは2019年の年末から。
  • プログラミングは中高校生のころにベーシックをかじったりその後HPつくるのにHTMLやCSSをかじったりした程度。

1 競技プログラミングをはじめたきっかけ

長年、プログラミングをちゃんと勉強したいと思いながらなかなか手につかずにいました。2019年の年末にAtCoderを知って興味を持ち、始めてみました。

また息子(高校生)がコンピューターに興味を持っていたことから、誘って一緒に始めました。

もっとも息子は寮生活で参加環境に制約があるため長期休暇のときと日曜日にABCがあるときぐらいしか参加できません。 普段ちょっと差を付けておいて長期休暇に差を詰められる、というかんじです。 じきに抜かれると思います。

f:id:chacoder:20200920002854p:plain

2 初めてのコンテスト

さっそく書店でC++の入門書を2冊(猫でもわかるC++プログラミング、やさしいC++)買ってきました。猫でもわかる・・・は看板に偽りがあり、とても猫にはわかりそうにない本でした。

初参加は12月29日のABC149で結果は2完。

C++の入門書でひとつひとつコードを確かめながらの参加。A問題に22分、B問題に64分(1WA)かかりました。2問も解けてしまってすごく嬉しかったのを覚えています。残念ながらABC149はunratedになってしまい、黒コーダー(ratedのコンテストの出場経験がなくレートがついていない競技者)のままとなってしまいました。

競技中に本を読んだりぐぐったり、あるいは予めライブラリを準備して臨んだりといったことが自由にできるのが競技プログラミングのいいところだと思います。

3 灰コーダーになるまで

2回目に参加したのは2020年1月10日のABC150。初回につづいて2完で1問目7分25秒、2問目53分04秒(1WA)。まだまだ入門書とにらめっこでした。 ところがまたもやABC150はunratedに。 黒いままのID表示を見ながら、早く灰コーダーになりたい思いでいっぱいでした。

翌日、2020年1月11日の第6回ドワンゴからの挑戦状予選で68分ほどでなんとか1完し灰色に。パフォ100、レーティングは5のスタートでした。

TLでAtCoder Problemsを教えてもらって使い始めたのもこのころ。モチベーションの維持や効率的な精進に役立つ仕組みがたくさんあり精進記録を見える化してくれる素晴らしいツールで格段に効率が上がりました。

https://kenkoooo.com/atcoder#/table/

f:id:chacoder:20200814194250p:plain

Twitterで競プロerをフォローしまくってTLから多くを学びました。初心者に優しい競プロerのコミュニティにはずいぶん助けられました。

4 茶コーダーになるまで

その後8回のコンテストを重ね3月7日にはパフォ1000をだしてレーティングは373に。茶色が見えてきました。 その後企業コン2回で続けざまに冷えて足ふみしつつ、3月21日のAGCで奇跡的にA問題が解けて茶色に。

f:id:chacoder:20200904140147j:plain

プログラミングの関連書籍を買いまくりましたが一番よくつかったのはプログラミングコンテスト攻略のためのアルゴリズムとデータ構造(いわゆる螺旋本)です。

会津大学会津オンラインジャッジ(http://judge.u-aizu.ac.jp/onlinejudge/)のアルゴリズムとデータ構造入門のコースで実際にコードを試しながら(難しいところは飛ばして)ほぼ一冊仕上げました。最初は簡単だったのですが木やグラフがでてくると、とたんに難しくなって閉口しました。

f:id:chacoder:20200814194447p:plain

また、DPなど理解の難しいところは、けんちょんさんの非常にわかりやすい記事に助けられました。

qiita.com

5 緑コーダーになるまで

茶色になってから緑までがとても長かったです。

精進すれば必ずレートはついてくると信じてがんばりました。

実際に問題を解き続けていると、昨日までの自分の知らなかった知識が増え、これまでの自分には解けなかった問題が解け、コンテストの最中にも道筋がすっと見えてきたり、よくでてくるコードは手が勝手に動いてくれるようになるなど、力がついてくるのを実感できました。

いくら上達が遅くても1000ACするころには緑になれるだろう、と思っていました。 ぎりぎり達成できるかと思っていましたが、思い通りにはいかないものです。 結局1085ACで緑化しました。

進めば進むほど問題の難易度があがり、streakをつなぐのも大変になってくるのですが、なんとかついていけるのが不思議なところです。精進が精進を助けてくれます。

その中で数学の力の不足を強く感じ、高校数学の復習をしたり、結城浩さんの数学ガールを読んだりして数学の勉強もしてきました。

www.hyuki.com

コンテストは水ものなので、思ったようにレートが伸びなかったり、失敗して冷えたりすることもありましたが、めげずに続けられたのは競技参加が好きなことであり、楽しいことであったからだと思います。

f:id:chacoder:20200814192521p:plain

毎週のコンテスト参加は本当に楽しみで、コンテストのない週末はお通夜のような気分でした。

これを知る者はこれを好む者に如(し)かず。これを好む者はこれを楽しむ者に如(し)かず。

楽しく学べるプラットフォームをつくってくださったchokudaiさんをはじめとするAtCoder社のみなさんにいつも感謝しています。

6 これからのこと

目標としていた緑コーダーになれて、本当に嬉しいです。 始めたころにあれほど遠くに思えた緑が、いつしか手にとどく目標となり、到達できました。

競技プログラマーは中高生や大学生、仕事でプログラミングを扱う若手のエンジニアの方が中心なので、50代も半ばに差し掛かったプログラミング初心者の私には、場違いな感じもありました。でもいくつになっても新たな学びに挑戦できるのが人間のいいところだと思います。

現在、(atcoderのプロフィールで年齢を公開している)同年生まれのプレイヤーの中では3位です。1位の方はmax水ぐらいなので、目標にしてがんばりたいと思います。

ストレスは別の種類のストレスで打ち消せるところもあって、毎週のコンテストは本業のストレスの緩和にも役立っています。

これからも精進を重ね、楽しく競技プログラミングに取り組んでいきたいと思います。