AtCoder Beginner Contest(ABC)の問題を解いた記録です。基本的に正解できたコードのみが登録されていますが、一部不正解だが記録のために commit されたコードも入っています。
- ✅: コンテスト時間内に正解
- 🙆: コンテスト外で正解
- 📖: 解説などに頼って正解
- ❌: 正解ではないが、とりあえずコミット
| コンテスト | パフォーマンス | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|
| ABC392 | 🙆 | 🙆 | 🙆 | 🙆 | |||
| ABC399 | 🙆 | 🙆 | 🙆 | ||||
| ABC400 | 241 | ✅ | ✅ | 🙆 | 🙆 | ||
| ABC401 | 239 | ✅ | ✅ | 🙆 | |||
| ABC402 | 188 | ✅ | ✅ | 🙆 | 🙆 | ||
| ABC403 | 582 | ✅ | ✅ | ✅ | |||
| ABC404 | 297 | ✅ | ✅ | ||||
| ABC405 | 622 | ✅ | ✅ | ✅ | ✅ | ❌ | |
| ABC406 | 487 | ✅ | ✅ | 🙆 | |||
| ABC407 | 478 | ✅ | ✅ | ✅ | |||
| ABC408 | 260 | ✅ | ✅ | 🙆 | |||
| ABC409 | 207 | ✅ | ✅ | 🙆 | |||
| ABC410 | 568 | ✅ | ✅ | ✅ | |||
| ABC411 | 550 | ✅ | ✅ | ✅ | |||
| ABC412 | 328 | ✅ | ✅ | 🙆 | |||
| ABC413 | 337 | ✅ | ✅ | ✅ | 🙆 | ||
| ABC415 | 399 | ✅ | ✅ | 🙆 | 🙆 | ||
| ABC416 | 322 | ✅ | ✅ | 🙆 | |||
| ABC417 | 267 | ✅ | ✅ | 🙆 | |||
| ABC418 | 459 | ✅ | ✅ | ||||
| ABC419 | 806 | ✅ | ✅ | ✅ | ✅ | ||
| ABC420 | 391 | ✅ | ✅ | ✅ | |||
| ABC422 | 🙆 | 🙆 | |||||
| ABC430 | 🙆 | 🙆 | 📖 | ||||
| ABC431 | 🙆 | 🙆 | 🙆 | ||||
| ABC432 | 🙆 | 🙆 | 🙆 | ||||
| ABC433 | 🙆 | 🙆 | 🙆 | ||||
| ABC434 | 🙆 | 🙆 | 🙆 | 📖 | |||
| ABC435 | 🙆 | 🙆 | 🙆 | ||||
| ABC436 | 🙆 | 🙆 | 📖 | 🙆 | |||
| ABC437 | 🙆 | 🙆 | 📖 | 🙆 | |||
| ABC438 | 🙆 | 🙆 | 🙆 | 🙆 | |||
| ABC439 | 262 | ✅ | ✅ | 🙆 | 🙆 | ||
| ABC440 | 309 | ✅ | ✅ | 🙆 | 🙆 | 🙆 | |
| ABC441 | 839 | ✅ | ✅ | 📖 | ✅ | ||
| ABC442 | 551 | ✅ | ✅ | ✅ | ✅ |
Dev Container になっています。コンテナを作成する手順は、次のとおりです。
- このレポジトリをクローンする。
- UID と GID を確認する。
もしローカルの UID と GID が次の表と異なる場合は、次のいずれかのコマンドを実行してローカルの ID がコンテナに反映されるように設定してください。この操作がないと、docker image の作成に時間がかかり、作成された image のサイズも大きくなります。
| ID | |
|---|---|
| UID | 1000 |
| GID | 1000 |
- VSCode で開き���コマンドパレットから
Dev Containers: Rebuild Containerを実行する。
bash .devcontainer/generate_env.sh
# or
python .devcontainer/generate_env.py
以上で、Python 環境の���、問題の入出力例を取得するプログラムが使えるようになります。
setting.pyコマンドを使うと、Firefox を使用して指定コンテストの問題ページから提示された入力例と出力例を取得して、その例をプログラムのテンプレートに埋め込むことがでいます。このテンプレートを使ってコードを作成すると、validate.pyコマンドで解答が期待通りか検証できます。
ただしこのプラグラムを実行する前には、いくつか事前の準備が必要です。
Firefox の画面を表示させるには、ローカルの X11 サーバが外部からの接続を許可する必要があります。そこでコンテナを実行しているマシン(注意:コンテナ内でない)上で次のコマンドで許可をしておきます。。
xhost +local:問題ページの巡回には、Firefox に専用プロファイルseleniumを使用します。次のコマンドで Firefox を起動した後、AtCoderにログインしておきます。
firefox -p seleniumもしプロファイルがない場合には、プロファイル選択画面が表示されます。Create Profile...を選択して、seleniumという名前のプロファイルを作成します。
プロファイルを保存するフォルダ(ディレクトリ)は、/home/vscode.mozilla以下にしてください。ここ以外を選択すると、プロファイル内容が消えてしまいます。
各問題の入力例と出力例は、次のコマンドで収集して、コメントとして埋め込んだ解答プログラムのテンプレートを作成します。
# ABC 123の例を収集
./setting.py abc123実行すると Firefox が起動して、各ページを自動的に巡回します。ただし Firefox は Headless mode で動いているので、画面は表示されません。
AtCoder のコンテスト開催中は、そのコンテストに参加登録したユーザでないと対象コンテストの問題ページを見ることができません。そのため事前にログイン情報を Firefox のプロファイルに保存しておく必要があります。
setting.pyが作成したテンプレートには、問題の入力例と期待される出力例が挿入されています。そこで、このテンプレートを使って解答コードを書くと、validate.pyで期待した出力が得られるかコードを検証できます。
./validate.py ABC_408/ABC408_A.pyOK と表示されれば、期待される出力例と一致しています。
一部の入力例についてのみ検証する場合は、--limitオプションを使用します。例えば入力例 1 についての場合は、次のようにします。
./validate.py --limit 1 ABC_408/ABC408_A.pyコンマで番号を区切ることで、複数の例を指定することも可能です。
./validate.py --limit 1,3 ABC_408/ABC408_A.py全ての出力例がOKとなったら、AtCoder に提出します。