仮のブログ

仮です

競プロのすすめ

こんにちは。仮の人と申します。
唐突ですが私は東北大学競プロサークルのpuzzleknotの一員として日々競プロに励んでいます。競プロ楽しい!!という思いで活動しているわけですが自分がしていて楽しいことは共有したいやん?ということで競プロの紹介をしたいと思います。
大学に入ったり新たな学年になったりして新たな事を始めたいなと思案している人に届けばいいなと思っております。

競プロって何ぞや?

そもそも競プロというものをご存じでしょうか。
競プロは正式には競技プログラミングと言います。競技+プログラミングという名前通り、プログラミングに競技性を加えたものです。
競い方には様々な種類があります。最もポピュラーなものはコンテスト(大会)が開催されて、そこで問題が出題されるのでプログラミングを用いて答えを与えるというものです。問題が出されるといってもピンとこないと思うので問題の例を1つ紹介します。「ナップサック問題」と呼ばれるとても有名な問題です。

たくさんの商品があり、それぞれの商品には重さと価値が定められています。また、あなたはナップサックを持っています。このナップサックは物を何個でも入れることができますが、入れる物の総重量に上限があります。総重量を超えないように商品をいくつかナップサックに入れるとき、商品の価値の総和の最大値はいくつになりますか?

f:id:karinohito:20210406020623p:plain
wikipediaより画像を引用

例えば商品の数が数個ならば手計算でも答えが求まるでしょう。しかし、商品が百個や千個、一万個とあったらどうでしょうか?? 到底手計算では無理です。しかしコンピュータを使って適切にプログラミングを組むことで解くことができるのです(もちろんそれでも限界はありますが)。このような問題に対してどれだけ多く解けたかやどれだけ速く解けたかを競うのが競プロです。ちなみに上の問題ですが現段階で解けなくても全く気にしないでください。いとも簡単に解けるような問題ではありません。すぐに解けたよという人はこんな記事読まずにさっさと競プロを始めてください。 いろいろなアルゴリズムとかテクニックとかを学ぶと解くことができるようになります。ほえーいつかこんなのも解けるのかくらいの感じに思ってください。

プログラミングなんて私には無理......?

誤解のないように述べておきますが、競プロで出される問題は無理難題ばかりではありません。もちろん解答を見ても今の私では何も分からんわ!!というような問題から四則演算さえプログラミングできれば解けるような問題まで実に様々な難易度があります。そのため上の例題をみて私に競プロはやっぱり無理だ~と思う必要はまっっったくありません。
あるいはプログラミング自体をしたことがないのに競技プログラミングなんて......と考える人もいるかと思います。私も始めるまでそう思っていた1人です。
しかし安心してください。あくまで個人的見解ですが、競プロはプログラミングを始めるのにむしろ適しています。
以下そう考える二大理由です。

  • プログラミングに明確な目標を与えてくれる

プログラミングは手段として用いられることがほとんど(というか全て?)であり、それを使ってどうするかというところがメインとなってきます。そのためプログラミングにはなんとなく興味はあるけど何をすればいいのか分からない......という状況の方もいるのではないでしょうか。その点競プロであれば問題に答えるというシンプルな動機があります。学ぶこと自体が目標となり、ライバルとも競い合えるためモチベーションの維持にはもってこいです。

  • 教材が多い

競プロが開催されるサイトは様々ですが日本人が参加しやすいもので最も規模の大きいAtCoderというコンテストサイトではほぼ毎週コンテストが開かれ、毎回1万人近くの人が参加しています。(海外サイトではもっと参加者の多いコンテストも開かれています。) そこで出題された数多の過去問は自由に見ることができ、公式、有志それぞれの解説が充実しているため学びたい放題です。
atcoder.jp

  • ちゃんとした導入がある。

上述したAtCoderにはAPG4bという初めてプログラミングする人に向けた入門サイトがあり、基礎の基礎から学ぶことができます。私もこのページでプログラミングを学び始めました。
そもそもパソコンに環境?とかいうよくわかんないものを作んないといけないんでしょ?と思った方も大丈夫。このサイトには事前準備が全く不要なweb上でプログラムを書いてすぐ実行できる仕組みが用意されています。そのためちょっとプログラミングを試してみるという方にもとても適していると思います。またコンテストの種類も様々で初心者向けのコンテストも用意されているため、段階を踏んでチャレンジしやすいです。
atcoder.jp

プログラミング学んで何するの?

そもそものプログラミングをする動機についてですが、例えば就活に有利だからとか、ゲームを作りたいからとかいろいろあるかとは思いますが、私の場合はもっと単純で、
何か学びたいな→プログラミングって出来たらなんかかっこよくね→いざやってみると楽しいやんけこれ!!
って感じの流れでした。いろいろ学んで競プロにどっぷりつかった今でもモチベーションの根底は「楽しいから」の一択です。競プロをするのに難しい理由なんて特に要らないと思います。

最後に

長々と競プロについて語ってきましたが、私が一番伝えたいのは競プロって楽しいぞ!!という事に尽きます。この記事を読んで競プロに少しでも興味が湧いたよという方がいたら是非一歩踏み出して試してみてください。もうちょっと競プロについて聞いてみたいなという方がいれば私に聞いてくだされば(答えれれる範囲なら)
何でも教えます。始め方とか導入とかも自分が分かる範囲で教えられます。
東北大の方は東北大競プロサークル(@t_puzzleknot) の方もどうぞよろしくお願いします。競プロ始めたての人やゆるふわな趣味そしてやっている人からとてもつよつよな人までそろっていてコンテスト後の解説会をしたりや過去問をもとにプチコンテストを開いたりしています。こちらも興味があれば声をかけてください。(勝手にサークルの宣伝をしてよかったのかしら...?)

それでは良い競プロライフを!!
最後まで読んでいただきありがとうございました。