競プロって何?
「競プロ」という単語に出合ったのは、確か、何かのアルゴリズムを調べていた時だったと思います。
競技プログラミングを略して「競プロ」。
はじめはこの単語に何となく違和感がありましたが、今ではすっかり慣れました。
どのような事を競うかというと、出された問題に対する結果を出力するためのプログラムを早く正確に書くことです。
実行時間の制限もあるので、効率的なアルゴリズムを利用する力、それをコーディングする力のいずれも必要な競技です。
世界的に競技者がいて、日本でも「AtCoder」という会社が大会を運営していることを知りました。
ほかにも、ロシアのCodeforcesやアメリカのTopcoderなどがあるようです。
AtCoderの問題は日本語で書かれていて、ユニークな問題が多いので、AtCoderの問題を解いていっています。
英語で書かれているものにそこまで拒否反応は起こしませんが、慣れていない問題形式はやはり日本語で書かれているほうが読みやすいです。
日本語で書かれているとはいっても、数学で出てくるような添え字がたくさん書かれていて、日本語でも何が書かれているのか初めのうちはわかりませんでした。
何が面白いのか?
競プロ(というか、AtCoder)のどこが面白いのか、と言えば、以下のようなものでしょうか。
- 問題が解けた時の嬉しさがハンパない!
- 解けなかった問題が解けるようになった時の快感が凄まじい!
- 問題文にセンスを感じるものが多い!
始めた当初は、標準入力すらままならなくてものすごく躓きました。
プログラミング自体は少し学習していたため、if文やfor文は、簡単なものであれば記述することはできましたが、少し複雑になると手におえない状況でした。
ある程度、問題を解いていくと、if文やfor文、listの作成や操作もできるようになり、AC(正解)できるようになっていきます。
問題を解いていく過程でどうしてもわからない部分は、公式の解説や解けた方のブログやQuiitaの記事で学びつつ類題を解いてみて、解けた時の嬉しさは大変大きいものです。
もうちょっと知識があれば解けるような問題が多くあり、ゲームで遊んでいるのと同じような感覚でアルゴリズムの習得ができていきます。
ちなみに自分が思う最適なゲームの難易度とは、ギリギリクリア出来そうで出来ない。という感じだと思います。
AtCoderの過去問には、この、「ぎりぎり解けそうだけど解けない><」という難易度の問題が数多くあり、自分のスキルが上がっても難しい問題も多数あるため、しばらくはこのゲーム感覚でクリアしていく感じでアルゴリズムとコードの書く練習ができそうです。
とはいっても、上級者用の問題はちょっと何を言っているのかわからないレベルなので、そこまで解けるようになるまでは今のところ目指しておらず、AtCoderの水色ランク(できれば青)を目指していこうと思っています。
AtCoderの色のランクについては、ここの記事を参考にしている方が多いと思います。
実際、非エンジニアのプログラム、アルゴリズムを学ぶものとしては、水色は高い目標かもしれませんが、楽しみながら学んでいたらいつの間にか水色になれた。という感じを目指していきます。
競技プログラミングに嵌って困ること
数週間ほど、競プロに嵌っていましたが、何が困るって、時間が一気に飛んでいくことですね。
1問解くのに2-3時間かかるときもしょっちゅうあり、時間が飛んでいきますw
あとは、解けた時がうれしすぎて、どんどん問題をやってしまうことでしょうかね。
そしてつい、ちょっと難しい問題に手を出してしまって、また数時間かかってしまって時間がどんどん溶けていくw
大会開催が土日の夜なことが多いため、土曜日の夜にキャンピングカーで遊びに出かけても、
「ごめん。お父さん、これからコンテストあるから先寝てて。」とかになりそうw
競プロ(というかAtCoder)界隈の方々へ感謝
AtCoder ProblemsさんのBoot camp for Beginnersなども利用させてもらいつつ楽しく学んでいます。
競プロで使用するアルゴリズムの学習では、けんちょんさんのブログやQuiitaのエントリーは大変参考にさせていただきました。今後もきっとお世話になることでしょう。
自分がPythonで解いていることもあり、maspyさんのブログも非常に参考にさせてもらっています。
そして、運営をしていただいているAtCoderの社員の方々、作問、解説をしていただいている方々にお礼を申し上げます。
コメント