N予備校からはじめてみた

プログラミング知識ゼロの26 (27になった) 歳ならば。

ちょっとした競プロ布教 (N予備校277~365日目)

277~365日目(2019.11.1~2020.1.28)

このブログを始めて 1 年が経ちました。早い。早すぎる。
昨年 9 月以降、N 予備校から離れているので、ブログタイトル詐欺に心を痛めております。

唐突にちょっとした競プロ布教
プログラミングをやったことがない方を想定して書いてみました。

(1) プログラミングに興味があって、軽く触ってみる程度の体験をしてみたい
Progate どうでしょう

(2) ガッツリ開発を体験してみたい
N 予備校どうでしょう

(3) 何かを作りたいわけではないが、プログラミングを練習したい
競技プログラミングどうでしょう

競技プログラミングは、実は敷居が低く、オンライン対戦パズルゲームみたいな感覚で 0 円で気軽に始められます。

競プロのゲーム的面白さが伝わる素晴らしい資料↓↓

www.slideshare.net

ここからは AtCoder (競プロのコンテストを開催している) について説明します。
オンライン対戦パズルゲームみたい、と表現した最大の理由は、レーティングシステムです。

f:id:BEN2suzuka:20191124230559p:plain
リアルタイムでコンテストに参加すると、コンテスト成績に応じてレーティングが変動します。
そして、レーティングに応じて「色」がつきます。灰 < 茶 < 緑 < 水 < 青 < 黄 < 橙 < 赤
上がれば嬉しいし、下がると悔しい。
上がったらもっと上げたいし、下がったらもとに戻したい。
動機は何であれ、アルゴリズムやデータ構造を学びたいと思うようになります。

さて、ほぼ毎週開催されている AtCoder Beginner Contest (ABC) という競プロのオンラインコンテストで過去に出題された問題を紹介します。

A - Round One
f:id:BEN2suzuka:20200127035253p:plain
条件分岐を制御する if 文を使う問題

B - Strings with the Same Length
f:id:BEN2suzuka:20200127035737p:plain
ループを制御する for 文を使う問題

競プロのコンテストと聞くと、めちゃ凄い人がめちゃ難しい問題を解くコンテスト、というイメージを抱くかもしれませんが、ABC では、毎回 2 問くらい、プログラミング練習の良い教材になるような問題が出題されています。
このように、実は競プロは敷居が低く、プログラミングを始めたばかりの方でも参加できます。
コンテストでゲーム的面白さを楽しみながら、プログラミングを練習してみませんか?

ちなみに。
3 問目、4 問目あたりからは、アルゴリズムやデータ構造に関する知識が必要となる問題が出題されます。
螺旋本や蟻本と呼ばれる競プロ er お馴染みの本、AtCoder の解説 PDF や YouTube 解説放送、競プロ er のブログなどで学べます。
レーティングを上げたいなあ、と思ったときに。
ちなみに、自分も BEN2のブログ にて数問だけ解説記事を書いています。

ということで、これから競プロを始める方は、まずは if 文とか for 文とかの書き方を知るために、

C++ の書き方を学びつつ、平行して

AtCoder が過去に開催したコンテスト問題をつまんでみましょう。
過去のコンテスト問題はすべて公開されているので、コンテストに参加する前に練習できます。
他にも、

Aizu Online Judge (AOJ) の「コース」の ITP1、ITP2
AtCoder Problems (AtCoder の過去問を一覧できる)

をチェックしてみるのもいいと思います。

AtCoder をはじめて利用する方は、

を読めば大丈夫です。

「プログラム書くの大変だな、ラクに書ける道具があるといいな」と感じるかもしれないので、そのときは

を読んで、VS Code (エディタ) を導入してみましょう。
エディタはあまりに便利なのでほぼ必須です。最初に導入してもいいと思います。
この記事は、LinuxUbuntu という言葉を知らなくても環境構築できるように説明されていますが、何なのか気になる方は、N 予備校の「入門コース」第 2 章の最初へ。

f:id:BEN2suzuka:20200124214543p:plain
VS Code の画面

最後に。AtCoder で最初に参加するコンテストは AtCoder Beginner Contest (ABC) をおすすめします。
だいたい土曜、日曜のどちらか夜 9 時開催 (100 分) です。
全 6 問 (配点は 100 - 200 - 300 - 400 - 500 - 600) で合計得点を競います。
リアルタイムで参加すると、レーティングがつきます。
注意点ですが、合計得点が同じ場合、要した時間 (その合計得点になった時刻 ー 開催時刻) の短い方が順位は上で、レーティング (パフォーマンス) も高く出ます。
そのため、途中参加は不利です。
せっかくレーティングがつくので、開催時刻から参加しましょう。

競プロ布教、N 予備校布教でした。


応用情報技術者試験
令和 2 年度春期の試験に申し込みました。
前回落ちてます。前回の受験前のツイート↓↓

お前落ちとるやないかい。もう落ちないぞ。


TOEIC
2020 年 1 月の TOEIC L & R を受験しました。
2020 年 3 月も受験します。こんな感じで今後も時々受験しようと思います。
(追記 : 2020.1.29)
f:id:BEN2suzuka:20200129131100p:plain
前回受験したのが 2016 年 5 月で 645 点。ちょっと伸びました。


AtCoder
再び競プロ話題。
始めたのは 2019 年 8 月で、そのときに「2020 年 1 月に水色」を目標にしました。
1 月が終わりますが、結果緑色でした。残念。
でも、緑色はそれはそれで嬉しいので。まあ。

f:id:BEN2suzuka:20200127025704p:plain
「2020 年に水色」を目標に再出発。
これから毎回パフォーマンスが 1500 台だと、3 月末くらいに水色になると思います。
ただ、過去最高パフォが 1313 なので、まだ時間がかかりそうです。

f:id:BEN2suzuka:20200128162858p:plain
頑張りましょう。


AOJ
Aizu Online Judge (AOJ) の「コース」を進めました。

f:id:BEN2suzuka:20200128141858p:plain
今後は「データの集合とクエリ処理」「組合せ最適化」「グラフ」を埋めていきたい。

提出コード : https://github.com/BEN2suzuka/proconlib

アルゴリズムとデータ構造入門 (ALDS1)」は大学の専門基礎科目っぽさを感じるコースでした。
ちなみに「螺旋本」は、大体このコースの問題から構成されています。

「プログラミング応用 (ITP2)」は易しめ。
ITP1、ITP2 は、AtCoder の APG4b (C++ 入門教材) と併せてどうぞ。
ITP2 で Multi-Set とか Multi-Map を初めて知ったし、イテレータを扱う練習もできたので、やって良かった。


いつやるのかな (再掲)
Linux、Git、SQL とか。
「コンピュータシステムの理論と実装」「作って理解するOS x86系コンピュータを動かす理論と実装」とか。
Udemy の講座もいくつか買って、そのままになってますねえ。