MIS.W 公式ブログ

早稲田大学公認、情報系創作サークル「早稲田大学経営情報学会」(MIS.W)の公式ブログです!

競技プログラミングを始めてみた話【新歓ブログリレー2019 7日目】

おはようございます!!!!!!!!!!!!!!!(AM 11:30)

MIS.W 53代 の 白(@shiro537)といいます。プログラミング研究会に所属しています。

 

今回ぼくがお話をしたいのは、今現在ぼくがハマっている競技プログラミングというものについてです。ぼくの春休みは9割以上これをして終了しました

競技プログラミングを始めて間もない初心者ですが、頑張って語っていきたいと、思いますっ!(YouTuber風)

競技プログラミングとは?

 

競技プログラミング(以下競プロと略します)とは、プログラミングの技術を競い合うコンテストの総称です(そのままですね)。様々なジャンルがありますがぼくが主にやっているのはAtCoderです。

atcoder.jp

与えられた問題に対し、条件を満たして適切な実行時間内にプログラムが終了するようなプログラムを素早く組んで、多くの問題をたくさん解くことのできた人が勝ち、という競技なのです。(正解数が同じ場合はより早く正解した人の勝ちです)

 

競プロでは、主に以下の2つの能力が要求されるのかな、と感じています(間違っていたらごめんなさい)

  1. 自分の考えたことをプログラムに起こして書く能力(実装力
  2. 愚直な実装では膨大な計算時間がかかってしまうような問題を、既知のアルゴリズムや数学的工夫によって、上手く計算できるようにする能力(アルゴリズムを組む能力

ぼくはこれらの能力(特に実装力)がまだまだ足りないので、日々AtCoderやその他コンテストサイト(AOJ、yukicoder、Codeforcesなど。他にもコンテストサイトはありますが自分が利用しているのはこんなところです)の過去問を解いて精進をしています。

yukicoder.me

judge.u-aizu.ac.jp

codeforces.com

 

なぜ始めたのか

ãã­ã°ã©ãã¼ã®ã¤ã©ã¹ã

自分は大学入学時、プログラミングに興味があって、情報系の学科に進学することを考えていました(現に私は今年から情報理工学科に進学しました)。

 

しかし、当時何かプログラミングに手を出そうと考えていたものの、特に作りたいゲームやアプリケーションなどなかったため、何から始めたら良いのか分からず路頭に迷っていました。

 

そんな時、競プロに出会いました。元々私は謎解きや数学が好き(得意だとは言っていない)だったので、すぐにでも始め..........ればよかったのですが......

 

大学入学したての僕は、受験勉強中にずっとやりたいと思っていたゲームを買ってそれにハマり、受験から開放された喜びから、暇な時間はずっとゲームばかりしていました。(たまにコンテストに参加していましたが、ただ参加するだけで勉強も何もしていませんでした。)

そのため、やっと競プロを本格的に始めたのは冬休みに入ってからでした。

 

 しかし、始めてからは、精進すればするほど自分のレートが伸びていき、レートが上がるに従って色が変わるのが楽しくて楽しくて、のめりこみ続けて今に至ります。ちなみにAtCoderの色と実力の相関については、AtCoder代表取締役社長であるchokudai氏のブログ記事に詳しく書かれています。

chokudai.hatenablog.com

 

ちなみに、自分の現在の色とレートはこんなところです。つい最近緑色になることができました!

今は、学部卒業までに青色(もっと欲を言えば黄色)になることを目指して日々精進しています。

 

f:id:bakamono1357:20190404011314p:plain

 

えっ、隙あらば自分語りして終わり???

ま、まって、まだ紹介するものあるから!!!まってもうちょっと読んで!!!

AtCoder便利サービス集

競プロをしている方々の中には、精進をするために便利なサービスを開発し公開してくださっている方々がいらっしゃいます。(圧倒的感謝)

ここでは、ぼくが精進をする時や、やる気を確保するのに利用しているサービスなどを書いていきたいと思います。隙自語して終わるわけにはいかない

kenkoooo.com

宇宙ツイッタラーX(@kenkoooo) さんが作成・公開してくださっているサービスで、AtCoderの過去問をコンテストごとに分類して一覧することができます自分のAtCoderのユーザー名を入力すると、自分の解いた問題と解いていない問題で色が変わるため、どの問題を解いたかがとても見やすく大変便利です。その他自分に関する様々な情報を得ることが出来ます。競プロをする多くの人が利用しているイメージです。

atcoder-scores.herokuapp.com

こちらは複数の方々(https://atcoder-scores.herokuapp.com/about)が協力して作ってくださったサービスで、AtCoderの過去問を得点ごとに分類して一覧することができます。また、自分がどれだけ過去問を解いて精進したのかという精進グラフも見ることも出来ます。精進のモチベーション維持にも役立つとても便利なサービスで、これも多くの人が利用しているイメージです。

not-522.appspot.com

こちらはnotさん(@not_522)という方が開発して下さったサービスで、AtCoder等の様々なコンテストサイトの過去問を利用して、誰でも仮想コンテストを開くことができるサービスです。誰かのコンテストに参加したり、先輩や仲間と一緒に同じ問題を解くことで刺激を貰うことが出来て、モチベーションに繋がる素晴らしいサービスです。自分もたまに開いたり、学科の先輩のコンテストに参加したりしています。

「え?」「ふざけてるの?」と思った方もいるかも知れませんが、ぼくは真面目です。世の中には、想像を遥かに超えるぐらい頭がキレる人たちがいます。

Twitterはそういう方々と、ひょっとすれば交流できてしまう素晴らしいツールです。競プロをやっている方々の多くはTwitterをやっていて、コンテスト前後ではタイムラインで議論が活発に行われています。

疑問をツイートするとプロ達からリプライが来て教えてくださり疑問点が解消されることもしばしばです。(ぼくも、何度も助けられました。いつも感謝しております...)

なので、競技プログラミングを始めるのであればまずTwitterを始めることをオススメします。

  • ブログ

競プロをやっている人達の中には、解いた問題の解法をブログにまとめるという努力をされている方々がいて、最近自分も真似し始めました。

bakamono1357.hatenablog.com

これは、まとめる作業をすることで理解を定着させる目的もありますが、逆に他の人のブログを読んでみるというのも主な目的です。

例えば[コンテスト名][問題]などで検索をすると、複数人の方の解法ブログがヒットします。自分は、「解説を読んでもよくわからないなあ」という時に先のように検索し、他の人の解法ブログを読むとかなり噛み砕いて分かりやすく説明されていて、理解できたという経験が何度もあります。

解いた問題の全てをブログ記事化するのは大変なので(しかしその労力を惜しまずに努力していらっしゃる方々もいます...!)、ぼくは自分で「これは大事だ!」と思った問題のみ記事化してまとめをしています。

  • 蟻本

↓この本です。表紙に蟻が描かれているので蟻本とよく言われます。

www.amazon.co.jp

これには競プロで用いられる様々なアルゴリズムやデータ構造、実装テクニックについて詳しく載っている、競プロをする人にとってのバイブルのようなものです。ぼくは今これを読み進めて日々勉強を重ねています。

 

最後に

なんだかまとまりのない文章になってしまった気がしますが、まあぼくが言いたいのは1つです。

 

みなさん!!!!!

競技プログラミング始めませんか!!!!!

競技プログラミングが好きな人、MIS.Wに入りませんか!!!!!

 

以上です!ここまで読んでくださって本当にありがとうございました!!!

明日は52代 momokさんの「大学から始めるイラスト・絵講座」です!

お楽しみに。それではまた。