garakutagoya

興味、関心のあったこと、そして私の気持ちなどを残していきたい

Atcoderのratingが茶色になりました!

Atcoder Beginners Contest 250(ABC250)で無事,茶色になれましたので何をやったかのご紹介をいたします.これが初心者プログラマーAtcoderをやってみたいけど何をすればいいか分かっていない人の参考になれば幸いです.

 

 

 

自己紹介

初めましての方は初めまして!知っている方はこれからもよろしくお願いします!hikki(Twitter ID:@taking0000)と申します.AtcoderではhikikomoriというIDでやらせていただいております.

現在二十歳の大学3年生です.所属は学園都市(電気通信大学-情報理工学域-Ⅰ類-情報数理工学)に所属しております.

大学,学部*1は名前の通り思いっきり情報分野で,理系単科大学なのもあって,大学内での会話に技術系のワードが発せられる事もよくあります.PCのスペックの話とかサーバーがどうたらとかずっと話してて宇宙を感じます.コスモ~~~~.

とはいっても自分は死ぬほど情報系の分野が苦手で,特にプログラミングがからっきしダメでボコボコボコボコボコボコボコボコ(16単位くらい*2を再履修しながらふと,「俺,留年するんじゃね...?」という危機感を抱いたわけであります.実際この授業マジで分からなすぎて再履してるのに第5回くらいから置いてかれてました.愛だよねって感じ.

さすがに留年してしまうと,家庭内で向けられる目線も冷たくなり,喪家の狗のごとくシナシナになってしまうなと思い,12月くらいからAtcoderを始めました.

 

始める前の状態

  • 競技プログラミングはおろかプログラミングすら怪しい(最初fizzbuzzも分かってなかったと思う)
  • 数学はずっと好きでよくやっていた,人より出来ると思う
  • 大学で取り扱っていた言語はRubyC++

 

開始0カ月(12月)

競技プログラミングを始めよう!と思っても最初何からすればいいか,どうすればいいか分からない人って意外と多いかなと思います.自分もそうでした.

Atcoder 初心者」とか「競技プログラミング 始め方」とか「プログラミング 上手くなりたい」とか調べてもあんまり自分にピンポイントで出てくる記事って出てこないかなと思うんです.

きっとああいう記事や本って,ある程度プログラミングが出来る人や情報系に精通している人にとっては最適なルート*3で,「なるほどなあ」と思う事が多いんだと思うんです.ただ,我々のようなズブの素人には「どうしてこれを今やるの?」,「これが出来るとどうなるの?」があまり見えてこなくてキツイものがあったりします.ムズカシイネ.

Atcoderへの登録は出来たものの*4,当然自分も何からすればいいか分からなかったので「何すればいいの!?」って競プロに熟達している人に聞いたりしていきました.そうすると基礎的なプログラミングの知識が覚束ない人はAPG4bをやっていくのがいいらしいぞという事が分かってきました.

atcoder.jp

実際,この選択はめちゃくちゃ当たりだったなと思ってます.マジビンゴっすね.APG4bの好い点はいくつかあるんですけど,初心者にとってはまずキーポイントと細かい話の部分が非常にありがたかったかなと感じてます.

キーポイントで「これを学ぶと○○が出来るよ!」ってのが明文化されていて,細かい話の部分で「今はこれ知らなくてもいいよ」って情報の優先度が下げられている事で,一気にぶわーーーーーーーーーーーーーーっとものを見させられているよりかはずっと,頭の中でmustで知っておかなきゃいけない知識と後で知っておけばいいかという知識の整理がしやすくてとても助かります.

また,APG4b内で学んだ事を確認するためにAtcoder内の問題を紹介し,解かせるようになっているのもよく出来ていると思います.

もちろん多くの一般の書籍にも確認問題は掲載されているのですが,Atcoder内で完結している・オンラインジャッジ故にそのコードがちゃんと動いているか,正解か不正解か分かりやすいという点でAPG4bは優れていると感じました.

ほんとうに初心者のうちは本とサイトで行ったり来たりするとそれだけで情報量が多すぎて疲れてしまうんですよね.*5

ほとんどの場合,コーディングをしている時に正解として示されるコードと完全に一致する事はないと思います.そして,自分の書いたコードが正解例と本質的に同一のものかはある程度プログラミングの熟達しないと分からないです.そういった面でもオンラインジャッジは非常に優秀な相棒となります.

加えて,オンラインジャッジを用いた入門教材の利点として環境構築をしなくてもコーディング出来る点も大きいです.コーディングするための環境構築はやや工程が多く,結構大変です.しかもそれをコーディングが楽しいかどうかも分からない下準備でやらされるのはそれなりの苦痛を伴います.

「○○を始めたい!!」って人に「ならAをしろ!」,「Bもしろ!」,「Cもやっとけ!」っていうのは,もちろん親切さからくる発言ではあるんですけど,やっぱそれで何ができるのか見えてないと言われる側はつらいんすよね.いうなれば何が出来るか伝えられずにBIG盆栽を作らされるような気分になっちゃいます.

閑話休題.ともかくそういった面でAPG4bは優れていると思います.下準備が軽い,サイト内で完結している,オンラインジャッジで正否が明瞭な点はとにかく強いです.インプットとアウトプットがそのサイト内で完結している点がvery最高なので皆やりましょう.

というわけで12月はAPG4bしかやっておらず,環境構築も全くしてません.C++の拡張子が.cだと思い込むガバガーバーな認知でした.

↑これはガーバー

↑これはアイケルバーガー

 

年末が近かった事もあり,テストやお遊びで忙しかったのでAPG4bを毎日やるでもなく,気が向いたときに纏めてやっている感じでした.今数えたら31ACでした.まあまあですね.勉強時間も平均して1時間ないと思います.このトキはstringとcharって違うんかい!めんどー!!!ってなってました.

全体的に型の知識や認識が弱く,bool型が意味わかってなかったです.

進捗

  • APG4b(EX.1~EX.12:出力の仕方から文字列まで).
  • 入出力出来るようになった.えらい.
  • forとかwhileとか出来るようになった.
  • 簡単な文字いじりが出来るようになった.

 

開始1カ月(1月)

相も変わらずAPG4bだけやってました.特にいうことはないです.確か多次元配列の部分があまりイメージ出来ず苦労してました.後再帰函数のとこは全然分からず飛ばしました.むずかしすぎ!

この月は22ACしてます.週2回くらいやってました.

 

進捗

  • APG4b(EX.13~EX.24:配列から構造体まで)
  • STL函数の存在を知った(これでC++love度結構上がった)
  • 多重ループが書けるようになった
  • 多次元配列はあまり分かっていない
  • 再帰函数は全く分かってない
  • STLコンテナは全然使えてない
  • 構造体は?/(^_^;)\?って感じ

 

開始2カ月(2月)

APG4bはビット演算のとこまでやってとりあえず第3章まで終わったので切り上げました.

ここからコンテストに出るか悩んだんですけど,まだもうちょい基本知識をつけたいと考えて

qiita.com

を上から解いていきました.たしかGreedyの部分で悩んでいました.この辺くらいからアルゴリズムの本が欲しいなとちょっと思うようになってきました.ちょうど2月は大学の試験で忙しく半月くらいAtcoderの間が空いてしまいました.この月は32ACです.

これは余談ですが周りの力を全力で借り,教授に頭を下げ,靴を舐めたお陰で留年を辛くも回避いたしました.ちなみに上に書いたプログラミングの授業の単位は落として再再履です!ばーかばーか!!

 

進捗

  • APG4b(EX.25:ビット演算)
  • 過去問精選10問(第6問まで)
  • bool型の使い方を理解できるようになった
  • STL函数は相変わらず便利
  • 再帰函数は何にも分かってない
  • 多次元配列よくわかんない

 

開始3カ月(3月)

今月は一度コンテストに出たいなと思って準備を進めていきました.春休みの終わりを目安にちょこちょこ問題を解き進めていってます.

この時からAtcoderをやる時により便利となる拡張を入れたり,丸1日潰して友人に手伝って*6もらいながら環境構築とデバッグが出来るようになりました.

noimin.hatenablog.com

scrapbox.io

特にAtcoder Problems

https://kenkoooo.com/atcoder/#/table/

Atcoder Scores

atcoder-scores.herokuapp.com

はとんでもなくお世話になります.

前者はAtcoderで解いた問題の管理(今日何提出したか,WAの問題は何かなど)がとにかく便利な上,Recommendationという機能で自分のレベルに合った問題を並べてくれる+Virtual Contest(バチャ)で非公式のコンテストに参加できよい腕試しとなるなど至れり尽くせりです.全競プロプレイヤーが使ってるんじゃないですかね.

後者はAtcoderの問題の配点を指定するとその配点の問題を紹介してくれます.これで自分の目指す配点の問題を並べて解いていき,研鑽を積むのもいいかと思います.

拡張機能に関してはComfortable AtCoder,AtCoder Easy Test v2,AtCoder Difficulty Displayはmustで入れてほしいかなと思います.他もかなり便利なのでポンポンポンポン入れちゃいましょう.

環境構築に関しては知識が圧倒的に不足していて場当たり的に作ったため,特にアドバイスを出来る事もないです.一応参考となったサイトを紹介しておきますが,その通りにやって構築できるかは定かではありません.ゴメンね!

↑おもしろいよ!!!!!!!!読もうね!!!!!!新刊出せ!!!!!!!!!

 

mogachan.net

基本はこれに従ってやりました.自分はなぜかmingw-w64-install.exeが動作しなかったので,

teratail.com

これを読んでオフラインインストールを図り,上手くいきました.デバッガは動かなかったので,

qiita.com

友達に紹介してもらったこのサイトを見ながら,

code.visualstudio.com

上の手段に従ってやったところ上手く動作しました.風の噂によると*7,miDebuggerPathで指定するファイルのアドレスにスペース(' ')があると上手く動作しない事があるらしいです.自分の弟の端末はそれでデバッグに詰まってました.よければ参考にしていただければ幸いです.

他にはユーザースニペット(cppって打つだけでC++のフォーマットが出力できる偉い奴)を作ったり,Atcoder Library

https://atcoder.github.io/ac-library/document_ja/index.html

といったAtcoder限定で使えるアルゴリズムの詰め合わせを入れたりしてました.

他には3月から解いた問題で特に時間かかった問題や,後から振り返りたい問題をこのブログでまとめるようになりました.プログラミングのブログを書く事で自分がよく引っかかる部分や悩んだ箇所の振り返りが出来,文字起こしをする事でどれくらい今理解できているかを可視化が出来,重要な部分をブログにまとめておく事でコンテストが始まっていざという時に参照できるライブラリ代わりとなっていました.

という事でブログ執筆は非常に有益なのでやりましょう.やりましょう!やりましょう!!やりましょう!!!お前ら,ツイートしてる暇あるならブログを書け!!!!!

という事でこの月はかなり進捗を生み出せたかと思います.なんだかんだ3カ月くらいやると,プログラミングの楽しさや環境構築のメリット,これやると何がおいしいのが見えてきて結構進みました.この3カ月をどう楽しんでもらうかの意味でもAPG4bには救われました.

↑オタク大好きダニング=クルーガー効果のグラフ.

正にこの馬鹿の山当たりだったのかな.多幸感に満ちてました.その度に水色の問題*8見て「俺まだまだやなー!!!ガハハハッ」って感じで過ごしてました.

この月は毎日Atcoderやってました.嘘です.

Longest Strerak見れば分かるように最大11日しか連続してAtcoderしてません.たまにサボるくらいの趣味が程よいと思います.

この月は77ACしています.春を謳歌していますね.

この月は謎にABC○○のC問題をAC→AとBもACしよう!!!って事をやっていました.なので結構灰diffをACしています.これはなんで始めたのかよく分からないんですけどプログラミング初心者にはかなり有益なトレーニングになると思います.とかく初心者は簡単でもある程度コーディングの量は合った方がいいと思います.

灰diffACはやや賛否分かれるところかと思うんですけど,自分としてはそれが目的にならなければいいと思います.だから灰diffをバチャで出題するのは特に何も言われませんもんね.*9同じ理由で自分の実力からして極端に簡単な問題を解いてLongestを伸ばす「虚無埋め」と呼ばれる行為も好きではないです(やる事は否定しません).

自分は半端にやったよりも「やる時やる!」,「休む時休む!」でメリハリをつけるのが好きなので何か1問やった気になるくらいならあんまり気にせずきっちり休んで他の事やるといいと思います.「○○しなきゃなぁ......」と思うともうやりたくなくなっちゃうからね.*10

何より「ついで」だからね!!!やるハードルも低いしお得です.*11

ちょっと長くて飽きてきたと思いますので曲でも聞きましょうか.

www.youtube.com

www.youtube.com

www.youtube.com

この時期くらいにACIDMANというバンドを知ってめっちゃハマりました.みんなもきいてね.

www.shibu-cul.jp

なんと今!渋谷で!ACIDMANの曲に合わせてプラネタリウムが見られます!!!コスモプラネタリウム渋谷は区の文化施設で入場料金もすごく安いので夜空が好きな方はぜひ!!!

宣伝おわり.ありがとうございました.

最後にコンテストにも出ました.

緑パフォーマンスが出て結構嬉しかったです.タイムライン見たら自分よりパフォーマンスが高い人しかいなくて*12まだまだがんばろーと決意しました.

 

進捗

  • 過去問精選10問(全部)
  • 灰後半~茶前半を狙ってACしてた.
  • STLのコンテナはちょっとずつ分かってきた.(vectorだとしんどいを感じられるとよいかも)
  • 再帰函数はうっすらと分かってきた.
  • 計算量の意識が少しずつ出来るようになった.(これはO(N^2)になりそうとかの把握は掴めてきた.)
  • 多次元配列はもう大丈夫

開始4カ月(4月)

この辺になってくるといわゆる「初心者向け○○」というものは粗方終わってきて,問題を結構解く過程に入ってくると思います.そういった中でどうしてもアルゴリズムの知識に不足を感じるようになってきました.APG4bでは基礎的なプログラミングの知識はつくのですが,そのついたプログラミングの知識でどーすんだい!!!みたいな事を感じるようになりました.人間というのは強欲で醜い,満たされたと思ったらすぐ何かを欲しがる,これより醜悪な生き物はいません.ふぇっふぇっふぇっふぇっ.

という事で一冊アルゴリズムの知識をつけたいなと思って,

www.amazon.co.jp

を買いました.これが一番難度が高くて色んな情報が載っているらしいのでこれにしました.自分のすごく悪い癖です.オタクなら,わかってくれるよな...!

これはとにかく激ヘビーです.ABCのB問題解けて「俺,プログラミング出来るんじゃね...?」とかなってた自分の心を木端微塵にしてくれました.まーじでむずい.

これの問題演習もしたいなと思っていたら,

qiita.com

といったものがあったので,上の本*13を読みながら上のqiitaに紹介されている問題を解く事を繰り返していました.*14正直veryハードだけどAPG4bや色んな問題を解いた事でそれなりにプログラミングの知識がついていたため,プログラミングの部分やコードの意味が分からないで読み進められない事はなく,純粋にアルゴリズムに向き合える点でかなり楽しいです.

こういった辞書的な本は一冊持っておくと有益なので,3カ月くらいして競プロを楽しいと思えたら何か買っておくのも有りかと思います.競技プログラミングをやってる方々の中でよく勧められるのは蟻本の他に,

www.amazon.co.jp

www.amazon.co.jp

www.amazon.co.jp

が有名です.これ買ったの3月か4月かちょっと怪しいんですけど,たしか阪神の勝率が.000だったのでたぶん3月ですね.エグイくらいの開幕連敗は横浜DeNAベイスターズを思い出してまあまあ心苦しかったです.

ともかく,この時期から蟻本をメインに勧めています(これは今も継続).ここに載ってるアルゴリズムAtcoder上の問題で実装*15する事でどういう原理でアルゴリズムが動くかが把握できるようになってきました.

APG4bの紹介でも書きましたが,インプットとアウトプットを繰り返す事は知識の定着において非常に重要であり,そういった面でもAtcoderのようなオンラインジャッジは有り難かったです.

特にDFS(深さ優先探索)やBFS(幅優先探索)といったアルゴリズムを実装をする際は,再帰函数STLのコンテナの両方の知識が必要となるため,必然的にどちらの使い方が分かってくるようになり,実装の能力も大きく上がりました.この時期になってやっと再帰函数のやりたいことが見えてくるようになりました.

4か月くらいやっていると最初の時は何言ってんだかさっぱりわからなかった緑色diffの問題や,水色diffの問題がちょっとずつ分かってくるようになり,その一部が解けるようになってきました.とはいってもまだまだ時間はかかってしまうので,こういった部分を高速化出来るようになるのがこれからの自分の目標かなと思います.

この時期もほぼ毎日Atcoderに触っていました.今数えたら122ACしていました.まあまあかな.

コンテストには3回出ました.

ほどほどに出来たと思う.Ratingが100くらい上がって承認欲求って感じでした.E問題が0-1BFSといった類のもので蟻本でサボって飛ばした事を後悔しました.

マジで出来なかった.たしかC,Dがどっちも緑diffギリギリの茶色diffの問題でAとBしか解けず虐殺されて悔しかったです.未熟さを感じる.この辺からDP(動的計画法)とlower_bound(二分探索)の大事さを感じるようになってきた.

コンテストに出る一番の意義はこうして毎週振り返りをする事で今の自分には何が足りないかを把握出来る事にあると思います.こうして毎週学びを積み重ねる事で,いつしか完璧になれるのでしょう.

そこそこ出来た.この時のC問題はbit全探索+map(STLのコンテナ)でAPG4bやっててよかった~~~~と心から感じてました.D問題で二重ループだけど計算を途中で打ち切って間に合わせる手法が載っていて「これ前も出来なかったな」と悔しくなっていました.

進捗

  • 蟻本を読んだ(DFS・BFS・Greedyまで)
  • 実装もしてみた
  • コンテスト本番だと茶色diffの問題に躓く事が多かったのでこの難度を集中して解いた
  • 気分と時間が向いたらバチャに出た

 

開始5カ月(5月)

世間はGWでしたね.どうですか?何か旅行に出かけましたか?私はずっと引きこもってAtcoderやってました.*16

上に書いた通り,自分の課題として茶上位~緑下位diff(600~1000)くらいがコンテストだと解けない場合が多く,そこがボトルネックになってパフォーマンスの数値が上昇しなさそうだなと感じたので,Atcoder Problems内にあるBoot Camp for BeginnersのMediumを全て解きました.最初の時点で他で解いたりした問題もあって20ACくらい既にしてあったので残りの80問をGW中に解き進めていきました.正直がんばったと思う

これを進めていった事で累積和の知識や,どこでDPを使えばいいか,Greedyや全探索を睨むポイント等が感覚で少しずつつかめるようになってきました.

特に累積和に関してはそれなりの問数がBoot Camp for Beginnersにあったため,かなり勉強になりました.最初に総和を前もって計算する事で計算量をO(N)に落とせるのは優れたテクニックだなと思います.実際のところは蟻本のDPのところが異次元にむずくて(青diffとか転がってる)情報カロリー過多になり,少し浮気したという事情もあるます.いっぱい解いて,自己肯定感を上げていこうな.

そんなこんなでGWは1日10時間くらいAtcoderやってコンテストに臨みました.

パフォも過去最高でレーティングも茶色になるという理想的この上ない結果でした.

特に嬉しかったのはD問題の茶上位diffの問題を解ききった事ですね.エラトステネスの篩+1文字固定して考える+探索を途中で打ち切るといった今までやりたかった事が全部出来て努力のかいあってめちゃ嬉しかった!!!!!!!!

D問題は(解けたけど)本当は二分探索や尺取法を行うべきらしいのでこの辺はまだ復習ですね.

とはいえ,無事に茶色になれました.わーいわーい!!!

進捗

  • Boot Camp for BeginnersのMediumを全部解いた
  • 蟻本のDPのとこを読みきった(ここマジできつい,最初にナップザックDPやるのはバカ,他のもので参照してもいいと思います)
  • ブログ書いたり書かなかったり

 

茶色になったので,今後

今後何しようかについてとりあえず目標を立てておきます.

まずは蟻本を進めていきたいです.尺取法やグラフ,Floyd–Warshall法といった部分がまだまだなのでこれから学習を進めていきたいです.特にグラフはグラフの実装は出来るけど解き方は......といった感じなので早急に読み進めたいです.

緑diffが安定して解けたらレートも緑になるという謎の私見があるので,とりあえず上にある通り茶上位~緑diffを解いていく事を続けていきたいと思います.

上で紹介したRecommendationは綺麗にこのレベルを勧めてくれます.実際この辺事前情報無しで解くとだいぶタフなので好い修行になるかな~~~と思います.この辺は難しすぎて大変,もう少し簡単なとこから始めたい,Longest Streakを続けたいならこれのEasyを解くのが有益かなと思います.自分だと400~500diffくらいの問題を勧めてくるので確実に解いておきたいくらいの問題を解く事が出来ます.

後はBoot Camp for BeginnersのEasyとHardを埋めていきたいですね.Hardは緑~水色diffくらいの難度でかなりかなりタフなのは想像に難くないのですが,いい修行になりそうです.

Easyは灰上位~茶下位diffくらいの難度です.これは4月の始めにやっておいてもよかったかも.今の自分の課題としてA,B問題を解く速度が遅い(15~20分くらいかかってる時ある)ってのがあるので,どっかのタイミングで時間計ってEasyを一気に解き進めるとかやるかもしれません.マラソンだ!!!サライ流せばそれっぽくなるかも.

open.spotify.com

これはあくまで自分の目標です.もし今灰上位~茶で「初心者向けのものは終わっちゃったな」って人はこんな感じのプランを参考にしてみてください.

 

Atcoder茶色になりたい!!!!って人へ

茶色になりたい人への細かなプラニングは書き散らかしたのでここでは心持ちというかこう考えるといいよみたいな事を書いときます.

 

とにかくコンテストに出よう!!!

マジでこれです.それしかないまである.あれだけだよ.というわけです.上のパフォーマンスとレーティングの推移を見てもらえば分かる通り,ぶっちゃけ自分で見て悪いな~と思ってもレーティングって上がります.A,Bをきちんと通す,つまり灰diffくらいをちゃんと解けるくらいになったらあとはコンテストに出るのも一つの手だと思います.APG4bをやってくと灰diffの問題はかなり解けるようになってくるので,後はどんどんチャレンジしていくのも十分ありです.

とかく失敗を恐れず,どーせ失敗しても,「ま,レート上がるしw」くらいの気持ちでコンテストに臨んでください.土日の21時に100分っていう非リア御用達時間を除けばきっと楽しい経験が出来るはずです.自分のプログラミングの実力がある程度可視化される点でもコンテストに出る事は大事です.ここで間違えたものや分からなかったものを復習する事で知識がどんどんついていきます.人間は失敗の記憶をよく覚えますからね.たぶん君も中高の黒歴史思い出して夜じたばたした経験あるっしょ.一緒一緒.

 

月毎の目標をたてよう

競技プログラミングは筋トレやダイエットに似ている部分があります.まず大目標があり(ムキムキになる,美しくなりたい),次に中目標があり(夏までに水着が入る身体になるみたいなやつ),最後に小目標(今日はスクワットやる)といった構造は非常に似通っています.

異なる点は後の2つと違ってそれが最初は分かりづらい点にあると思います.プログラミングの全景はあまりに広い上に,裾野はちょっと狭いがためにどうしても最初どうすればいいか分かんなくなっちゃうんですよね.

そうとはいえプログラミングを始めようと思う人は概ね「プログラミングが上手くなりたい!就職でいいとこに行きたい!」が動機だと考えてます.自分は留年したくないなので底辺っぷりがカンストしてますね.ルナ*17かよってくらいだ.

ともかく,なんだかんだこのブログをここまで読んでいる人はプログラミングに関する何らかの大目標や野心があると思います.その心意気を大事にしてください.

chokudai.hatenablog.com

企業でプログラミングスキルを活かしたい!って方は読んでみるとといいかと思います.

水色 (Bランク R1200~1599 上位15%)

水色はかなり優秀です。普通に企業とかで超優秀って言ってるプログラマが居た時に、半分くらいはこのランクになると思います。数学が得意なタイプだと、この一つの上の青色に行きますが。

半数以上のIT企業において、アルゴリズム能力についてはカンストと言えるでしょう。特にアルゴリズム的な能力を必要としない会社であれば、ここから上はレートを上げても実務に役立つ部分はほとんどありません。

とあるので,(Atcoder上ならば)大目標はレーティングを水色にする事でしょうか.自分も水色になりたいです.一番好きな色だからね.

また,小目標も比較的立てやすいかと思います.ある程度プログラミングをやると間違いなく分からないところが出てくると思うので,それを解消するといった形で立てると言いかと思います.それもないならRecommendationのmoderate,それ嫌なら茶diff解いてみる......などなど.

この記事にも記載の通り,なんだかんだ最初が分かればやろうと思えばやれる事はめちゃくちゃあります.そういった中から自分がやりたい事,補強したい知識を中心に進めていくのがベターでしょう.

問題となるのは中目標です.この中長期的な目標が一番立てづらいし分かりづらい.なぜか.プログラミングの世界に四季はないから.

残念なことにエンジニアは常識が外れているらしいので,季節感はありません.そのため,○○月にどうしようとさしてそれが特別な意味をもちません.7月だろうと11月だろうと水着を着てもいいんです.

そのため,たてるとしたら「○○を理解したい」か「夏休みまでにレーティングの色を変えたい」みたいにもっておくといいと思います.自分もそれを意識してわざと分からなかったところを強調しています.

それでいう競技プログラミングの明確な利点はダイエットや筋トレと違って日によってのバラつきが少ないところかなと思います.このアルゴリズムやプログラム言語の使い方が分かっていればきっと明日も使えます.明後日も明々後日も使えます.文字として,言語として,コードとして残るからです.今日,あなたが頑張って必死に理解して書いたコードが,明日のあなたを助けてくれます.明確に残るというのはそういった面での利があります.再現性が保たれている事は非常に重要でしょう.

とはいってもあまり臆することないように.まずは「多次元配列を理解したい」くらいですごく良いと思います.実際ここを理解するのはまあまあ大変ですし,自分も結構悩みました.2次元ならともかく3次元配列ともなると脳が混乱します.*18

というようにこの三つをきちんと立てて,なんとなくでやらないようにしていけば,長続きもするし能力もちゃんとついてくるのかなーーーと考えてます.

 

適当にサボろう

上に立派な事書いてからこれ書くのふざけとんのかと思われるかもしんないですけど,正直4割くらいふざけてます.これ書いてるとき30時なんよ.さすがにおじさんも疲れてきたよ.

とはいえサボるのは大事です.穏当にいうと息抜きでしょうか.始めたての人が「うおおAtcoderやるぞおおおおおおおお」ってやって毎日8~9時間とかやっても正直1週間以内に投げてると思います.理由は3つあって,1つはシンプルにそんなにやる気が持たない事です.今日何回も話す馬鹿の山の話なんですけど,これって絶対にどっかで落ちるんですよね.山のてっぺんに行ったままぐにゃーーーーーーーーって右上に伸びてかないの恐ろしみだ.

とかくこういう落差は一気に人を冷やします.「彼氏ラブ💕彼氏いなきゃすぐ死ぬし卍」みたいな熱愛カップルが半年持たず別れるのと一緒です.*19

なぜか分からないんですけど落下地点が同じでも一気に落ちる方が人にダメージを与えます.*20という事で最初は「ちょっと頭使って疲れたー,また明日にしよう」くらいでいいかと思います.本当にダイエットや筋トレと一緒ですね.はじめっから筋トレマスターと一緒の運動して一気に瘦せようとしてる人はやっぱ続かないです.

加えて知識の定着部分にも鍵があります.寝ている間に人は起きている間に得た知識を定着させていきます.するとちゃんと寝て(ちゃんと寝ろ)朝起きると知識が整理され,まとまりを得ています.「寝て起きたら分かった」というのはそういった事も拘わっています.したがってしっかり日を跨いで考える事も重要です.くれぐれも俺みたいに「今日これ解くまで寝ない!!!!」とかやらないように.だいたい明け方まで時間無駄にして解けません.

後寝て起きたら結構覚えた事忘れるので,そのタイミングで自分のコード見て復習をする事で,インプット→アウトプット→インプットのサイクルが回せます.*21重ね重ね言いますが,コードという形で残るお陰で,自分の思考が再現性を保ちます.これがプログラミングの魅力でしょう.

という事でたまにはサボりましょう.なんであれ,義務感でやりだしたらそれはもう終わりです.一番つまらないです.あなたの時間はあなたの為にある.無駄な事をしている場合ではありません.あなたが楽しくなるように過ごしましょう.それであなたがプログラミングをしなくなってもそれはそれでいいと思います.経験した事,触れた記憶は何らかの形でずっとあなたの中に残ります.大事なのはまず触れる事にあります.触れ方に拘る必要は全くありません.*22

ぶっちゃけ毎週土曜か日曜の21時に律儀に競技プログラミングのコンテスト出てたら頭おかしくなっちゃう.オタク,外に出よう!!!

 

人を頼ろう

最後はこれに尽きます.競技プログラミングには早解きでパフォーマンスが決まる側面があるものの,基本的に誰かが出来る事で自分が不利益を被る可能性が低いものです.そのためか知らずか競技プログラミングをやってる人は聞いたらめっちゃ教えてくれます.*23

自分はTwitterのFFに競技プログラミングやってる人がそれなりにいたのでガンガンタイムラインに分からない事ツイートして流してました.競技プログラミングをやってる人の多くはTwitterをやっているので全くの素人はTwitterアカウントをもって色々情報を入手するのもかなりありでしょう.

さらに自分は中高からの友人にAtcoderのレートが黄色の人がいて,その友人に冗談抜きに毎日プログラミングについて分からん事聞いてました.この記事で多少なりとも知性を感じる部分はほぼ全てその友人に教えてもらった事です.マジでバカクソ迷惑だと思うし,質問レベル鬼低いのに毎度毎度丁寧に答えてもらって感謝しかないです.次会った時は財布出させない.

てなわけで聞ける人にどんどん聞いて強くなっていきましょう.なんなら何が分からないか文にしてまとめるだけでも成長につながります.その点でもブログ,よきよ.

それで聞いた後には感謝を忘れないように.人として当たり前ですが,こういった部分をしっかりしていたら成長していけるのではないかと思います.

 

最後に

なんか思った事とか伝えたい事書いてたらちょっとだけ長くなってしまった.*24入茶記事でこんだけ長いのはきっと自分だけだと思います.ギフテッドってやつですね.

とにかくここまでお読みいただきありがとうございました.読んでいただける誰かのお陰で俺は今日も頑張れます.実際最初は何したらいいか分からず色々とこんがらがると思います.この記事がそういった人の助けとなる事を切に願っております.何かございましたらご連絡ください.

それでは皆さん,よいプログラミング生活を!じゃあね.

番外編 記事に貼れなかったいろいろ

舐めてんのかな.という事でここに記事に書けなかったけど紹介しておいても損はないかなくらいのを掲載します.

他にお世話になったサイト

qiita.com

何を使えばいいかの把握やvectorって何が出来るんだっけ...?のメモ代わりとして優秀です.Atcoderの問題を開く時はいつも横のタブで開いてます.

cpprefjp.github.io

C++の関数やクラスの詳細な記載がなされている.これは辞書替わりに使ってます.計算量も載ってて相当便利.

marycore.jp

marycore.jp

最初'0'の足し引きで変化する事がピンと来ずに謎でした.文字コードの関係ですね.文字コードの知識はちょくちょくAtcoder上でも出てくるので学習しておくといいかと思います.

iconcreator.hatenablog.com

WSL2でAtcoderの環境構築をしたい人向け.自分はあまり上手く出来ませんでした.よければ参考にしてください.

qiita.com

けんちょん先生のqiita.計算量について書かれています.こういうのに関心を持ち始めたらいっぱしの競技プログラミングプレイヤーという感じがしますね.

qiita.com

累積和もめっちゃ勉強になった.神.

oeis.org

Atcoderの入力例での数列を入力すると一般項を返してくれたりする(かも).ずるいね.たまに数学的な問題が出た時にこれでふむふむいってます.

qiita.com

茶色まで行った人はこれを上からやるのもかなり有益だと思います.アルゴリズムの話が載ってて特訓になります.

judge.u-aizu.ac.jp

会津大学の運営するオンラインジャッジです.こちらにもプログラミングの問題が多々掲載されています.こちらの方はあまりアルゴリズムを活用したりしない基本的(=教育的な問題)がある印象です.

algo-method.com

 

解きながらアルゴリズムについて学べます.マジで超便利です.DPはこっちの方が理解しやすいと思います.

正直これ活用すればアルゴリズムの本なくても耐えられるかもね.大きく人によりますが,それだけ便利なサイトです.

 

解いた問題数や色

AcceptedがAC数です.これくらいACすると茶色になれるという一つの基準としてもらえるといいかな.夏までに500AC行きたい.

謎にC問題がよく解かれてる.Cは難度の振れ幅広いからそうなりがちなのかも.

茶色は半分くらい解きました.Boot Camp for Beginnersのお陰です.これくらいやるとかなり力つくと思います.これ見たとき達成感で結構嬉しかった.

千里の道も一歩より.頑張ってください.応援しております.

今度こそおわり.

*1:電通大では学域といいます,二重線引いて学域って書き直すの恥ずかしいから学部に合わせてほしいです.

*2:サバ読んでる.実際は30単位くらい)))単位を落とし続けてきました.こうならないでね(>_<)

そんなこんなで2年後期になって,一番Basicなプログラミングの授業((基礎プログラミングおよび演習

*3:プログラミングがある程度できて競技の世界に行きたい!みたいなイメージ.

*4:

新規登録 - AtCoder

*5:俺が怠惰of怠惰な可能性はすごくあります.

*6:介護の穏当な言い方

*7:信憑性が疑わしいという意

*8:難度高けー問題

*9:実際のABCに近い難度の環境でやるためという目的がある場合が多い気がする.

*10:こういう人は往々にしてダイエットが続かず,出席が重要視される言語の単位を取る事が難しい事が俺の調査(n=1)で知られています.

*11:こういう「ついで」意識からみなし残業は生まれたんだなあと思ったり思わなかったり

*12:馬鹿の山のてっぺん辺りの発言,当たり前だよね

*13:Twitter上では表紙になぞらえて蟻本といわれています.

*14:実を言うと順序が逆で,この記事を見つけたから蟻本を買った節が大いにあります.

*15:コードに書き起こす事

*16:前の質問英語の授業(再再履,再履,再履,必修の4コマ!)で聞かれすぎて答えるのめんどくなってきて親が死んだことにしてました.ラブアンドピース!!!

*17:

時価総額4兆円のルナ、一夜で価値ゼロに ステーブルコインUSTはなぜドル連動が崩壊したのか(1/5 ページ) - ITmedia ビジネスオンライン

*18:現実世界と一緒だよ!

*19:こういう奴は往々にして3か月以内に新しい相手を見つけるのでそれはそれでありなのかもしれない.季節性アベック.

*20:運動エネルギーとか抜かすと気持ち悪いから注釈に入れた.いい子には内緒だよ!

*21:みんな大好きエビングハウス忘却曲線です

*22:眠いからふざけた事書いてますね.この記事の全否定です

*23:シンプルに理系の人特有の同好の士を見つけるとめっちゃ語りたくなっちゃうあるあるかもしれません.

*24:言い訳の質が校長先生と同じ