ARMERIA

Rubyと競技プログラミングの話 AtCoderやCodeforcesの問題解説記事が多め。

解説記事のはなし

この記事は「Competitive Programming (1) Advent Calendar 2018」の5日目の記事です。

解説記事を書いています

私がコンテストの参加記録として記事を書き始めたのは今年の5月末くらいです。競技プログラミングを始めたのが4月頭なので、だいたい2ヶ月後です。最初の記事はこれ。

AtCoder ARC098 参加記録 - ARMERIA

それ以来、参加したコンテストは全部ではありませんがなるべく記事を書くようにしています。AtCoderでは参加したABC/ARC/AGCは毎回書いています。企業コンやCodeforcesはたまにサボっています…

記事を書くようになって以降「この記事のおかげで理解できた」という声ももらうようになり、嬉しい限りです。皆さんのACが私の記事執筆エネルギーになっています。

解説記事を書く目的

解説記事を書いている目的は2つです。

  • 自分の復習のため。
  • 他の人、特に公式解説を読んでよく分からなかった人の理解の助けとなるため。

単発で書いている精進記事は前者、コンテスト後に書いている記事(特にABCオンリー回)は後者の目的が強いです。

どんな記事を目指しているか

私の記事は全体的に「長い」です。長い文章を書くというのが好きというのもありますが、一番の理由は「公式解説を読んでよく分からなかった人の理解の助けとなる」ためです。

writerさんにもよりますが、AtCoderの公式解説は簡潔です。解ける人の目線で書かれているので(writerさんが書いているので当然ではありますが)、「あと一歩で解ける」という人には必要十分で非常に良い解説となっていますが、知識や理解レベルにギャップがあると「解説の解説がほしい」という状態になります。私も競技プログラミングを始めたばかりの時は解説を読んでそう思うことがありました。

そのため非常に簡潔にまとまっている公式解説と相補的に機能するもの、つまり前提知識や考え方についての補足があり、理解レベルのギャップを埋められるようなものを書きたいと思っています。

競プロ以外にも言えることですが、「万人にとって必要十分になるような説明は存在しない」と考えています。読む人によっては私の記事は冗長すぎると感じるかもしれません。公式解説PDFがあり、とても分かりやすい解説放送があり、そして私以外にも何人かの人がコンテスト後に解説記事を書いています。解説を探す人は、是非自分に合った解説を見つけるため渡り歩いてほしいと思います。

記事を書く時に意識していること

まず公式解説を読みます。解説放送がある場合はそちらも観ます。そしてTwitterでコンテスト参加者の人のツイートを見て「どういうところで考えが詰まってそうか」をチェックし、そこをどうやったらフォローできるかを考えて記事を書きます。

先述の通り「公式解説と相補的に」がモットーなので、こんな感じのことを意識しています。逆に公式解説がめっちゃ丁寧で分かりやすいと、私が書くことがなくなるので困ります(?)

もう1つ意識していることは「図を使う」ことです。競プロの考察においても解説においても、図はとても有効です。いかに視覚的なイメージを持てるかで理解度が大きく変わってきます。私自身が図形的なイメージで理解していることは、なるべく解説でも図付きで記述するようにしています。図を描くツールは「draw.io」のデスクトップ版を使っています。

speakerdeck.com

最近はこんな感じでスライドを使うことも始めました。スライド作成にはGoogleスライドを使っています。

ただしABCオンリー回など、コンテスト終了直後に解説記事を公開できそうなときにはスピード重視で書くこともあります。そのタイミングが一番「解説が要望されている」時間かなと思うので。

解説記事を書いてみませんか?

私は解説記事を書くことも好きですが、読むことも好きです。私自身、分からない問題の解説を求めてブログなどを探すことが多々あります。自分が解説を書いた問題も、他の人の解説を読むことで参考にしています。

解説記事を書くのはけっこう時間がかかるので、全ての人にオススメできるものではないです。面白そうだなと思ったらやってみてください。いつかその記事のおかげでACする人が現れるでしょう。私も色々な人の記事を読むのが楽しみです。

オススメ解説記事ブログ

個人的に好きでよく読んでいる解説ブログを勝手に紹介します。

  • Mister雑記
    • 個人的に推しNo.1。ものすごく解説が丁寧で分かりやすい。図もキレイ。コンテスト終了後の記事も過去問の記事も充実しています。
  • kmjp's blog
    • 解法説明はとても簡潔。とにかくたくさんの問題の記事を書かれていて高難度の問題も多いので、私が自分で解けなかった問題の解説にいつも助かっています。
  • けんちょんの競プロ精進記録
    • どんな風に考察を進めていけばよいか」がとても丁寧に書かれている記事。思考の流れがすごく参考になるので、たとえ自力で解けた問題であっても読む価値大です。
  • Kutimotiの競プロメモ
    • こちらも、問題を解く人目線での思考の流れがよく分かる記事。こちらのページ に掲載されている問題もあります。

おわり

これからも記事をたくさん書いていくので、よろしければ読んでやってください。よろしくお願いします。