masuTomo’s blog

競技プログラミングの勉強メモです.主にPythonを使用します.数学の記事も書くかもしれません.

非プログラマーがやる競技プログラミング

はじめに

この記事は次のアドベントカレンダーの12/11の記事として投稿します。 qiita.com

対象読者

競技プログラミングをやっていて次のいずれにも当てはまらない方

  • 上級者(AtCoder水色以上くらい)
  • 競プロ忘年会に参加している人 (今日やってるらしい)
  • IT系企業に勤めている
  • 理系大学(院)生である
  • 競技プログラミングを一緒にやる友達等がいる
  • Twitterに競プロをやっているフォロワー(リプライできるひと)がいる
  • めちゃめちゃ頭がいい(一人で精進してどんどん強くなれる)

要は周りに競プロやってる人いないけどやってみたい(やってるぞ),でも不安だな,という人に向けた記事のつもりです。

私の周囲の環境

  • 非ITの職場(エクセルマクロ使える人はほとんどいない)
  • 競技プログラミングという言葉を知っている人が知人にいない
  • 現実世界で競プロをやっている人と会ったことがない

一人で競プロをやっていて困ること

  • 情報が入ってこない
  • 勉強が続かない
  • 疑問が解決できない

この3つがとても大きいです。これらのことに焦点をあてて記事を書きたいと思います。

情報収集について

そもそも,このブログにたどり着いている方は,この部分を読む必要はない気がしますが,一応書きます。

Twitterをはじめる

これがほぼ唯一解な気がします。私自身,Twitterを始めた時期と競プロを始めた時期が(たまたま)ほぼ一致していますが,競プロの情報の9割以上はTwitterから得ています。

ここで,私がフォローしている競プロerのアカウントをいくつか紹介します。(勝手に紹介してすみません)

@chokudai いわずもがなAtCoderの偉い人。ぷよぷよとかその他の話題も多い。

@drken1215 @drken_procon けんちょん本の著者。アルゴリズムググるとこの方のQittaの記事によく出会う。

@kenkoooo AtCoder Problemsの方。チョコケーキがお好きらしい。

@kyopro_friends よくAtCoderのコンテストのWriterをされているイメージ。コンテスト後に問題に対して解説ツイートしてくれるのだ。

@kaede20203 この方の周りには色々な競プロerが集まってこられてます。こつこつ続けられていて本当にすごいです。

@e869120 この度,競プロの本を出版されるとのこと(予約しました)

@sak_algo アルゴ式の方(大変お世話になりました)

※ほかにもたくさんの競プロerの方をフォローしていますが,ツイートの頻度や内容,私のアカウントから見つけやすかった,という3つの観点で選びました。 基本的には,ここで紹介した人のうち,数名をフォローしておけば,あとは芋づる式にたくさんの競プロerを発見することができる思います。

注意点

自分と同じくらいの実力の人もフォローしましょう。そして自分も発信しましょう。意外と自分と同じことで悩んでいる人もいるものです。

理由

基本的にフォロワーがたくさんいて発信力がある(Twitter上で有名)な方は強い方(AtCoderでいう青以上)が多い気がします。

コンテスト後のTLが,自分にはちんぷんかんぷんの話題ばかりになってしまい辛いです。

勉強が続かないことについて

正直難しいです。

競プロを一緒にやっている友人知人がいる場合は,コンテストのあとにわいわいすることもできるでしょう。そのために普段から勉強するというのも楽しいでしょうし,なんなら競プロゼミのようなことをやっている人もいるかもしれません。

ですが,ひとりぼっちだとそのどれもありません。せいぜいレート上がったことをツイートして,1つか2ついいねがつくくらいです。

それではなかなか難しいので,ある程度の強制力が必要だと思います。ここで私が色々試したことを列挙します。(合う合わないは個人差が大きいと思うので,私が挫折したものでも,みなさんに合うものもあるかもしれません)

とにかくコンテストに出る

これを私は川内優輝方式と読んでいます。つまり,本番で練習してしまおうということです。 最初の方の自分のレートがどんどんあがっている時期はいいのですが,レートが下がり始めると辛くなります。

自分でノルマを決める

毎日◯◯をやるぞ!と決めて取り組んだこともありました。個人的にはこれが一番合っているのですが,問題点として,わからない問題にぶつかったときに進捗がでない(後述)。仕事が忙しくなるとできなくなり,その後ペースを元に戻しにくい。

なお,このときはAtCoder Problemsのrecommendationの問題をこつこつやっていました。

Paizaに課金する

1ヶ月くらいで挫折しました。3ヶ月やったうちの2ヶ月分くらいの利用料は無駄になりました。

アルゴ式をやる

アルゴ式でテスターをやらせてもらう機会をいただきました。コーチング,ペースメイキングということでサポートいただきましたが,結局この他者からのプレッシャーが一番効果的だった気がします(結局一人ぼっちじゃ無理ということになってしまう)。

ちなみに,テスター期間は終了してしまいましたが,アルゴ式に取り組むこと自体は継続しています(アルゴ式は初学者向けのコンテンツとして,とてもおすすめだと思います)。

疑問の解決について(精進)

書籍について

書籍とWebサービス以外に頼れるものはありません。ここでは私が所有している書籍をご紹介します。

www.amazon.co.jp

www.amazon.co.jp

www.amazon.co.jp

*プログラミングコンテスト攻略のためのアルゴリズムとデータ構造(マイナビ

www.amazon.co.jp

このうち,役にたったと感じているのは最初の2冊かと思っています。それ以外の本はちょっと初心者には難しいです。ただ,蟻本などは辞書的に使うことがあります。 一緒に読み進めたり,質問できる相手がいれば良いのでしょうが,一人なのでそうもいきません。

そのことを打破するために次の提案します。

アウトプットの機会をつくる

Twitterかブログで発信しましょう。一人で勉強していると知識を得るという意識に偏りがちなので発信することを意識するのが良いと思います。

友人知人がいることの良さは議論できることだと思っています。もう少し限定すると,自分の口で説明する機会が得られることとしても良いかもしれません。ベアプログラミングと似たような考えでしょうか。

発信することで自分の考えを整理するきっかけになりますし,自分がわかっていない部分が明確になります。

初学者は,なかなかそのような行動は取りにくいかもしれませんが,同じような初学者で困っている人も多くいます(AtCoderでも灰・茶の人がほとんどなのですから)。 ぜひやってみてください。

もし,みなさんがそのようなブログやツイートを見かけたら積極的にいいねするようにしてあげてください。

おわりに

とりとめのないことをつらつらと書いてしまい非常に読みづらかったのではないかと思います。

ずっと一人で競プロをやっていて,続ける工夫を試行錯誤する中の一つの取り組みとしてこのアドベントカレンダーを利用させてもらいました。ごめんなさい。

私は地方に住んでおり,競プロのイベントにも気軽に参加できません。最初に書いたように一緒にやる知人もいません。ときには次のようなツイートをしたこともあります。

冗談ですが,心情としてはこんな感じです。 もし,ここまで読んでくださった稀有な方がいらっしゃれば,ぜひ私と一緒に競プロをやりましょう。よろしくお願いします。

最後までお読みくださいありがとうございました。