QLITRE DIALY

AtCoderで入茶したのでこれまでのことを振り返る

2022年12月18日

2022年12月17日に行われたHHKBプログラミングコンテスト2022 Winter(AtCoder Beginner Contest 282)にて、入茶をすることができた。

HHKBプログラミングコンテスト2022 Winter(AtCoder Beginner Contest 282)

言語はPythonを使っている。

初めての色変、ということで、今日はこれまでに行ってきたことを振り返りたい。

私について

まずは自分のステータスについて、簡単にまとめる。

年齢は33歳。

4年制の大学は出たけれど、学部は文系だった。数学は苦手意識は持っていないけれど、知識は高校くらいで止まっている。

プログラミングの経歴については、2020年の1月にPythonを始めた。

といってもエンジニア系の会社で働ているわけではなく、主にPythonやVue.jsなどを使って趣味でプログラミングをしている。

(仕事でちょっとしたプログラムを書くことはたまにある)

これまで読んできた通り、目立った経歴はない。AtCoder上では凡人に類されるだろう。

AtCoderに取り組む理由

この辺りについては以前に書いたエントリでも触れた。

AtCoderをはじめてみた

上述の通り、自分は仕事でほぼプログラミングをやらないので、差し当たった必要性は感じていない。

単純に楽しい、というのが主な理由だ。楽しいが高じて、初回の参加をしてからほぼ毎週参加をしている。

それと…取り組むべき目標がある、というのが継続するうえでのモチベーションにつながっていると思う。

これまでのプログラミングはWEBアプリ制作に注力をしてきた。

アプリ制作というと仰々しいが、趣味でDjangoやNode.jsを使ってブログを公開してきた、という感じになる。

ブログサイトを作るのもエキサイティングな経験ではある。

しかし、ある程度のものが完成をしてしまうと、次の目標が見つけづらい。

その点、AtCoderなどのプログラミングコンテストでは毎週お題が出されるので、次にやることに迷う必要がない。

レーティングという形で客観的な向上感を得られるのがすばらしい。

この向上しているという感覚は、普段の生活では自発的に動かなければ持ちづらい。

とにかく脳汁が出ている感じがする。理由としてはそんなところだ。

有体にいって、理由をもって取り組んでいるというよりも、アディクトしているという表現の方が現状を言い表しているのかもしれない。

現在のレベル

ビギナーコンテストではC問題まではコンスタントに解けるようになってきた。

D問題は「知ってればやるだけ」問題を一回解けただけ。時間内に解くことができない。

勉強法について

基本的にABCのC問題~D問題と、競プロ典型 90 問の★2~★4を解いている。

Notionで管理する

解いた問題の履歴についてはNotionデータベースで管理を行っている。

問題タイトルとURL、使用するアルゴリズム、自力で解けたかどうか、などを記録している。

ACしたソースコードはデータベースのページ内に保存している。

こうしておくとアルゴリズムを元に過去の問題を参照できるので、似たような問題があったときに見つけやすい。

Ankiで振り返る

「一回解いたので出来る気がしていたが、もう一回やったらできなかった」ということは往々にしてある。

これを極力減らすために、一度解いた問題はAnkiにも登録して振り返り学習を行っている。

Ankiについて

AnkiについてはたまたまQuoraのスレッド配信で「すんげーアプリ」と紹介されていたので導入をしてみた。

まだ使いこなせていないが、良い感じに反復してくれる単語カードのようなものだろうか。

Ankiとは、分散学習(Spaced Repetition)ができるフラッシュカードです。 Ankiでは思い出しやすさで次の復習のタイミングが決まります。覚えにくいカードは頻繁に復習し、簡単に記憶できたカードは時間をあけて記憶を確認します。 このような原則に基づくと効果的な結果が得られるという学習理論に基づいて作られています。 多量のカードを持っていても、結果として一日の復習量は散らばって、負担を軽減してくれます。

https://rs.luminousspice.com/how-to-anki/

Anki使用例

学習カードには問題名とURLのみを載せている。

学習を開始すると、このようにURLが提示される。

AtCoder上で提出が終わったらShow Answer ボタンを押して、どのくらいの難易度だと感じたかを記録する。

もちろん解法が自明でわざわざ書くまでもなければ、提出自体を行わなくてもいい。

簡単だと感じたら一カ月後、難しいと感じたら5日後を目安に問題が再出現する。

この辺りのパラメーターは自分好みで設定ができる。

データの登録について

Ankiへのデータの登録はAnkiConnectとNotion APIとを使ってある程度の自動化をしている。

AnkiConnect

Notion API

この辺りは機会があればまとめたい。

読んだ本とか

その他には適宜書籍を使って勉強している。

解説や他の人のソースコードを見ても良くわからない、ということが往々にしてあるので、解説が詳しい書籍はありがたい。

私はPythonを使っているので、Pythonコードで解説を行っているのがうれしい。

やはり圧倒的にC++の例が多いと思うので。

Kindle Unlimitedなら無料、そうでなくても100円で購入ができる。

必要な問題のリストを入手できるだけで100円の価値があると感じる。

こちらも凡人が~と同じような本。

現在はこちらを元に問題を解いている。

独学プログラマーで有名なコーリー・アルソフさんの本。

AtCoderに特化した内容ではないが、Pythonを用いたアルゴリズムについて学ぶことができる。

実際にここで紹介されているアルゴリズムがコンテスト中に役に立ったことも多い。

Pythonで競技プログラミングに取り組んでいる人は読んで損はないだろう。

なお、詳細なレビューはプログラミングブログの方にも書いた。

Pythonアルゴリズム入門に 『独学コンピューターサイエンティスト』

今後の目標

とりあえずD問題を時間内に解けることを目標に頑張りたい。

ではでは。