Atcoder Utility
VS Code上でのAtCoderのコンテスト参加と学習をサポートする拡張機能です。
主な機能
1. ファイルエクスプローラーの強化
- 正解確率の可視化: あなたのAtCoderレーティングと問題のDifficultyに基づき、問題フォルダに正解確率の目安を絵文字とパーセンテージでバッジ表示します。
- 🔵 (75%以上): 自信を持って解ける問題
- 🟡 (40%以上): ちょうど良い練習になる問題
- 🔴 (40%未満): 挑戦的な問題
- AC状況の表示: AtCoder Problemsの提出履歴と連携し、AC済みの問題に ✅ マークを表示します。
- コンテスト情報の表示: コンテストフォルダにマウスをホバーすると、正式名称や開催日時をツールチップで表示します。
2. サイドバー・ダッシュボード
アクティビティバーの専用アイコン Ⓐ をクリックすると、あなたのAtCoderステータスが一覧表示されます。
- My Status: 現在のレーティング、最高レーティング、ランク表示、総AC数、連続AC記録、色別のAC数。
- Recommended Problems: あなたの現在の実力に合わせた、次に解くべきおすすめの問題リスト(Difficultyに基づき計算)。
- Current Contest: 現在開いているコンテストの問題一覧とAC状況。
- Bookmarks: 問題フォルダを右クリックして、後で復習したい問題をブックマーク・管理。
- AC Activity: サイドバーの「AC Activity」ビューから、1週間、1ヶ月、3ヶ月、6ヶ月ごとのAC数をグラフとヒートマップで表示。
- Custom Tests: 独自の入力・出力ケースを作成し、
test
フォルダに my_test_N.in
/ .out
として保存。
- Problem Timer: 問題を解く時間を測定するタイマー。
- Contest Actions:
- コンテストの準備(
acc new
相当の操作を自動化)。
- 提出の準備(ファイルをバンドルし、プログラムをコピー、提出リンクを開くことで、Ctrl+Vと提出ボタンのみで提出可能に)。
- 入力予測スニペットの生成。
- リセット(現在開いているファイルをtemplateの内容にリセットします)。
- Random Input: 制約を設定すると自動でテストケースを作成。クエリの入力はStruct Arrayで設定可能。
- Fuzzer: Random Inputの設定を保存することで、愚直解とメインの解法で出力が変わる入力例を発見。
- Virtual Contest: 時間、コンテスト種類、問題の絞り込み、フィルタを設定してバーチャルコンテストを実施。ステータスバーに残り時間が表示され、終了時間が近づくと通知。
3. ステータスバー連携
- 常時レート表示:
👤 ユーザー名 (⚪ 1985)
のように、現在のレーティングを常にステータスバーに表示。
- 自動テスト: ファイルをセーブ(Ctrl+S)したときに下のバーにテスト結果を表示。カーソルを合わせると具体的な結果を表示。
- デフォルトではC++・Python・Java・Rust・C・C#・Ruby・Go のみ対応。
- 設定でoj tの実行結果を出力することも可能(動作が不安定になる可能性あり)。
4. 問題文表示
- ブラウザを使わずに問題文を表示。設定で常に表示するかを選択可能。
- アクセスを減らすためHTMLファイルが生成されます(不要であれば非表示を推奨)。
5. 入力予測
- 問題文から入力を予測(現在はC++のみ)。Contest Actionsからボタンを押すと、クリップボードに入力がコピーされます。
- ルールベースで動作し、ABCやARCのコンテスト中に使用可能。
- 特殊な入力やクエリ問題では動作しないことがあります。
6. 自動折りたたみ
- 設定したファイル名(例:
Main.cpp
)を開いたときに、設定した行数を自動で折りたたみ。
使い方
1. インストール
Visual Studio Marketplaceから「Atcoder-Utility」をインストールしてください。
Atcoder-Utility - Visual Studio Marketplace
2. 初期設定
VS Codeの設定 (settings.json
) を開きます。 (Ctrl + ,
-> 右上のファイルアイコン)
必須設定 (F1 -> 基本設定: 設定(UI)からでも変更可能)
"atcoder-utility.userId": "your_atcoder_id",
"atcoder-utility.aclPath": "your_atcoder_library_path",
"atcoder-utility.templateFilePath": "your_template_file_path"
userId
: レートやAC確率計算に使用します。
aclPath
: C++などのコンパイル時に使用します。
templateFilePath
: コンテストセットアップ時に自動生成されるファイル(.cppや.pyなど)のパスを設定します。
AtCoder Session Cookieの設定:
F1 -> AtCoder-Utility: Set AtCoder Session Cookie
を実行し、AtCoderのセッションクッキーを設定します。
- 取得方法 (Chromeの場合): F12で開発者ツールを開き、「Application」タブ -> 「Storage」-> 「Cookies」->
https://atcoder.jp
を選択。「REVEL_SESSION」の値をコピーし、VS Code上に貼り付けます。
- この値はSecretStorageで管理され、スクレイピングに利用されます。
基本設定 (F1 -> 基本設定: 設定(UI)からでも変更可能)
"atcoder-utility.autoTestEngine": "custom",
"atcoder-utility.bundleEngine": "custom",
"atcoder-utility.languageSettings": {"..."}
autoTestEngine
: 自動テストで使用するエンジン(custom
は拡張機能内蔵、oj
はonline-judge-tools)。
bundleEngine
: バンドル&クリップボードにコピーで使用するエンジン(autoTestEngine
と同様)。
languageSettings
: 自動テストで使用するコンパイルコマンド(autoTestEngine
でoj
を設定している際は不要。C++、Python、Java、Rust、C、C#、Ruby、Goはすでに設定済みで変更も可能)。
4. 入力スニペットの設定 (コード生成)
サイドバーの「Contest Actions」から「入力予測スニペットの生成」ボタンを押すと、問題文の入力形式を解析し、対応するコードを生成してクリップボードにコピーします。
この機能は非常に柔軟なテンプレートシステムを採用しており、settings.json
を編集することでお好みの言語やコーディングスタイルに合わせて生成されるコードを完全にカスタマイズできます。
基本的な使い方: 使用言語の選択
settings.json
で、主に利用する言語を設定します。これにより、コード生成のベースとなるテンプレートが切り替わります。
{
"atcoder-utility.codeGenerationTemplates": {
"useLanguage": "python"
}
}
useLanguage
には、現在サポートされている以下の言語を指定できます。
cpp
(C++)
python
java
rust
c
csharp
(C#)
ruby
go
高度な使い方: テンプレートのカスタマイズ
デフォルトのテンプレートを、部分的に自分のスタイルに合わせて上書きすることができます。
例えば、C++で long long
を ll
と省略して使いたい場合、以下のように設定します。
{
"atcoder-utility.codeGenerationTemplates": {
"useLanguage": "cpp",
"cpp": {
"scalar_long_declaration": "ll {name};"
}
}
}
また、vectorではなく、vecなどにしたい場合も
{
"atcoder-utility.codeGenerationTemplates": {
"useLanguage": "cpp",
"cpp": {
"array_1d_declaration": "vec<{type}> {name}({dim1});"
}
}
}
このように、"useLanguage"
で指定した言語のオブジェクト内に、変更したいテンプレートのキーと、新しいテンプレート文字列を記述します。ここで指定されなかった他のテンプレート(scalar_integer_declaration
など)は、すべて拡張機能のデフォルト値が使用されます。
主なテンプレートキーとプレースホルダー
テンプレートは、キー
と、{}
で囲まれた プレースホルダー
の組み合わせで構成されています。
キーの例 |
説明 |
プレースホルダーの例 |
scalar_integer_declaration |
int 型の変数宣言 |
{name} : 変数名 |
scalar_input |
複数の変数を読み込む行 |
{names} : >> で連結された変数リスト |
array_1d_declaration |
1次元配列の宣言 |
{type} , {name} , {dim1} |
array_1d_input |
1次元配列の入力 |
{name} , {dim1} |
loop_start |
ループの開始部分 |
{count} : ループ回数 |
すべてのテンプレートキーとデフォルト値は、package.json
で確認できます。
依存関係 (オプション)
この拡張機能は、以下のツールがなくてもすべての機能が動作します。
一部機能はこれらのツールと連携して動作させることも可能です。
- atcoder-cli (acc): コンテストフォルダの作成に使用。
- online-judge-tools (oj): テストの実行・ファイルのバンドルに使用。
注意事項
- 本拡張機能が使用するAPIは非公式なものであり、予告なく仕様が変更され、機能が動作しなくなる可能性があります。
- 解ける確率はあくまで推定値であり、実際の正答率を保証するものではありません。
- AtCoder Problemsのdifficultyを参考にしていますが、負の値になる場合があります。
- 入力予測機能は、問題文のHTML構造をルールベースで解析しているため、間違ったコードを生成したり、全く動作しない場合があります。特に、以下のようなケースでは解析に失敗する可能性が高いです。
- 複雑なループ:
A_{i+j}
のような添字が複雑なループや、ループの増減ステップが1ではない場合。
- 特殊な形式のグリッド入力: 文字がスペース区切りでなく、
S_1S_2...S_N
のように連続して与えられるグリッドは、1行の文字列として解析されます。
- インタラクティブ問題: 標準入出力が交互に行われるインタラクティブ問題には対応していません。
- 非標準的な入力形式:
...
や ⋮
を使わないなど、AtCoderの標準的な入力形式から大きく外れている場合。
貢献
バグ報告、機能要望、改善提案などがありましたら、GitHubのIssueにご連絡ください。
ライセンス
This extension is licensed under the MIT License.
この拡張機能はMITライセンスであり、商用利用も可能です。
いかなる場合においても、著作者または著作権者は、本拡張機能の使用、その他の取り扱いに起因または関連して生じるいかなる請求、損害、その他の責任についても責任を負わないものとします。