Skip to content

atcoder/yukicoder vscode extension for c/c++/java/python/go/javascript/typescript

License

Notifications You must be signed in to change notification settings

taizod1024/vscode-ac-ts-extension

Repository files navigation

AtCoder Extension

C/C++/Java/Python/Go/JavaScript/TypeScript での AtCoder/Yukicoder への参加をサポートする Visual Studio Code の拡張機能です。

変更

  • 2024/6/15
    • リファクタ
      • 認証情報の格納先を SecretStorage に変更しました。認証情報を格納したファイルがあれば SecretStorage に移動してから元のファイルを削除します。
      • 認証情報の格納先を変更したことに起因して内部的に非同期処理が増加しました。問題があれば連絡願います。
  • 2023/9/9
    • 機能強化
      • atcoder のジャッジアップデートに対応しました。
        • atcoder の場合には submitTask 時に提出可能な言語を動的に取得するようになりました。
        • dakanat さんのPRを取り込みました。ありがとうございます。
  • 2023/04/05
    • 機能強化
      • C++の場合に Init Task/Test Task/Debug Task でAtCoder Libraryを自動ダウンロードするようにしました。
        • AtCoder Library は$projectpath/lib/atcoderに格納します。
        • AtCoder Library のドキュメントに従い C++コンパイルコマンドを以下のとおり変更しました。
          • 変更前:g++ -g $taskfile -o $execfile
          • 変更後:g++ -g $taskfile -o $execfile -std=c++17 -I $projectpath/lib
      • C++のテンプレートファイルを修正しました。Init Task してから AtCoder の場合はコメントアウトを元に戻します。Yukicoder の場合は行を削除します。
        • 追加行:// #include <atcoder/all>
      • パラメタを拡張しました。
        • $projectpath
      • 作業フォルダを変更しました。
        • 変更前:C:\Users\...\AppData\Local\Temp\ac-ts-extension
        • 変更後:C:\Users\...\AppData\Local\Temp\.ac-ts-extension
  • 2022/12/08
    • 機能強化
      • Linux でのデバッグ実行に対応しました。
        • 問題があれば連絡願います。
        • 現時点でデバッグ実行に対応していないのは Windows/Linux ともに Go だけです。
  • 2022/12/04
    • 機能強化
      • Windows での Java/C/C++のデバッグ実行に対応しました。
        • C/C++はデバッグ実行のためコンパイルオプションに"-g"を追加しています。
        • 現時点では Go のみデバッグ実行に対応していません。
        • Linux は未検証のためエラーにしています。
  • 2022/08/29
    • 機能強化
      • Go に対応しました。
      • ローカルでタスクを登録できるようにしました。
        • 競技プログラミングサイトに関係なく問題を登録することができます。
  • 2022/08/24
    • 機能強化
      • Linux 環境に対応しました。
      • 任意の言語に対応しました。
        • 設定の"User1"に対して以下を参考に設定します。
          • 拡張子、例:.bat
          • チェックコマンド、例:cmd /c
          • コンパイルコマンド、例:空文字列
          • 実行コマンド、例:$taskfile
        • パラメタを拡張しました。
          • $site, $contest, $task, $extension

機能

C/C++/Java/Python/Go/JavaScript/TypeScript での Visual Studio Code から AtCoder/Yukicoder への参加をサポートします。

  • AtCoder/Yukicoder へのログイン
  • C/C++/Java/Python/Go/JavaScript/TypeScript のソースコードの生成
  • テストデータのダウンロード
  • 解答のテスト実行、デバッグ実行
  • 解答の提出
  • ブラウザでの問題ページの表示

testtask

制限

  • マルチルートワークスペースには対応していません。
  • Linux でのデバッグ実行はサポートしていません。
  • Python/JavaScript/TypeScript のデバッグ実行時は以下の場合の NG 判定ができません。
    • 戻り値が 0 以外による NG 判定
    • 例外が発生したことによる NG 判定

動作確認環境

  • Windows
    • Windows 10 (21H2)
    • Visual Studio Code (1.70.2)
    • C (mingw 11.2.0.07112021) 実行+デバッグ
    • C++ (mingw 11.2.0.07112021) 実行+デバッグ
    • Java (AdoptOpenJDKjre 16.0.1.901) 実行+デバッグ
    • Python (3.10.6) 実行+デバッグ
    • Go (1.19) 実行のみ
    • JavaScript (Node.js 16.13.0) 実行+デバッグ
    • TypeScript (Node.js 16.13.0) 実行+デバッグ
  • Linux
    • Ubuntu (WSL2)
    • C (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0) 実行+デバッグ
    • C++ (g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0) 実行+デバッグ
    • Java (openjdk version "1.8.0_342") 実行+デバッグ
    • Python (Python 3.8.5) 実行+デバッグ
    • Go (go version go1.13.8 linux/amd64) 実行のみ
    • JavaScript (Node.js 12.22.12) 実行+デバッグ
    • TypeScript (Node.js 12.22.12) 実行+デバッグ

準備

AtCoder および Yukicoder でユーザ登録します。Yukicoder の場合はプロフィール画面の API キーを確認しておいてください。

vscode

vscode の [拡張機能] から AtCoder Extension を検索してインストールします。

C/C++/Java

gcc/g++/clang/jdk 等をインストールします。
環境に合わせて設定からコマンドを変更します。

Python

Python をインストールします。

Go

Go をインストールします。

JavaScript

Node.js をインストールしてから TypeScript の初期設定をします。

  1. vscode の [ファイル] > [フォルダを開く] からフォルダを選択します。
  2. [ターミナル] > [新しいターミナル] から以下のコマンドを実行します。入力を求められたらすべて Enter キーを押して進めてください。
    npm init

TypeScript

Node.js をインストールしてから TypeScript の初期設定をします。

  1. vscode の [ファイル] > [フォルダを開く] からフォルダを選択します。
  2. [ターミナル] > [新しいターミナル] から以下のコマンドを実行します。入力を求められたらすべて Enter キーを押して進めてください。
    npm init
    npm install --save-dev typescript ts-node @types/node

npminit

使い方

vscode で F1 を押下(もしくは [表示] > [コマンド パレット] を選択、Ctrl+Shift+P を押下)して [コマンド パレット] から機能を選択します。

AtCoder/Yukicoder へログインする

はじめに AtCoder Extension: Login Site でユーザ名とパスワードを入力して AtCoder にログインします。 Yukicoder の場合はプロフィール画面の API キーを入力します。

loginsite

問題をはじめる

まずはじめに AtCoder Extension: Init Task で問題名を入力して提出用のソースコードの生成と問題用のテストデータのダウンロードをします。

  • サイトをatcoder,yukicoderから選択します。
  • コンテスト名は AtCoder の場合は abc190の形式、Yukicoder の場合は351の形式で入力します。いずれも URL から確認してください。
  • 問題名は AtCoder の場合は abc190_a の形式、Yukicoder の場合は1692の形式で入力します。いずれも URL から確認してください。
  • 解答する言語は.py,.ts, .js から選択します。
  • ソースコードは src/atcoder/abcXXX/abcXXX_X.ts に生成されます。
  • テストデータは src/atcoder/abcXXX/abcXXX_X.txt にダウンロードされます。
  • フォルダは自動的に作成されます。
  • 既にソースコードやテストデータがある場合はスキップされます。

inittask

問題に解答する

生成されたソースコードの main()を修正します。 ソースコードのひな型にカスタマイズしたい場合は、後述の設定を参照してください。

C ひな型

#include <stdio.h>

int main(void)
{
  /* TODO edit this code */

  /* param */
  int n;
  scanf("%d", &n);

  /* solve */
  int ans;
  ans = n;

  /* answer */
  printf("%d", ans);

  return 0;
}

C++ ひな型

#include <stdio.h>
#include <iostream>

int main()
{
  /* TODO edit this code */

  /* param */
  int n;
  std::cin >> n;

  /* solve */
  int ans;
  ans = n;

  /* answer */
  std::cout << ans;

  return 0;
}

Java ひな型

import java.util.Scanner;

public class template {

  public static void main(String[] args) {

    // TODO edit this code

    // param
    Scanner sc = new Scanner(System.in);
    int n = Integer.parseInt(sc.next());
    sc.close();

    // resolve
    int ans = n;

    // answer
    System.out.println(ans);
  }

}

Python ひな型

# TODO edit this code

# param
n = int(input())

# solve
ans = n

# answer
print(ans)

Go ひな型

package main

import (
	"fmt"
)

func main() {

	// TODO edit this code, this code is for https://atcoder.jp/contests/practice/tasks/practice_1

	// param
	var a int
	var b, c int
	var s string
	fmt.Scanf("%d\n", &a)
	fmt.Scanf("%d %d\n", &b, &c)
	fmt.Scanf("%s\n", &s)

	// answer
	fmt.Printf("%d %s\n", a+b+c, s)
}

JavaScript ひな型

TypeScript と同様です。

TypeScript ひな型

import * as fs from "fs";

// util for input
const lineit = (function* () { for (const line of fs.readFileSync(process.stdin.fd, "utf8").split("\n")) yield line.trim(); })();
const wordit = (function* () { while (true) { let line = lineit.next(); if (line.done) break; for (const word of String(line.value).split(" ")) yield word; } })();
const charit = (function* () { while (true) { let word = wordit.next(); if (word.done) break; for (const char of String(word.value).split("")) yield char; } })();
const readline = () => String((lineit.next()).value);
const read = () => String((wordit.next()).value);
const readchar = () => String((charit.next()).value);

// main
const main = function () {

    // TODO edit this code

    // param
    let n: number;

    // init
    n = Number(read());

    // solve
    let ans;

    // answer
    console.log(ans);

    return;

};
main();

問題の解答をテストする

問題の解答を作成したら、ソースコードを開いてから AtCoder Extension: Test Task でテスト実行します。

  • 処理が 5 秒以上続くと自動的に中断します。
  • 誤差が許容される問題の多くは NG になります。目視で判断してください。
  • bigint での出力が必要な問題は文字列化して末尾の n を除去して出力してください。

testtask

テストデータの例です。テストデータを追加する場合は -------- で区切って入力値・出力値を追加します。

2 1 0
--------
Takahashi
--------
2 2 0
--------
Aoki
--------
2 2 1
--------
Takahashi
--------

問題の解答をデバッグする

問題の解答をデバッグするには、ソースコードを開いてから AtCoder Extension: Debug Task でデバッグ実行します。

  • テストデータの個数だけデバッグ実行が繰り返されます。

debugtask

問題の解答を提出する

解答の作成が完了したら、ソースコードを開いてから AtCoder Extension: Submit Task で解答を提出します。

  • 言語を選択します。
  • 構文エラーがあっても提出されます。テスト実行が失敗していても提出されます。注意してください。

submittask

不要なソースコードとテストデータを削除する

AtCoder Extension: Remove Task を実行すると、問題のソースコードとテストデータを対で削除します。

ブラウザで問題ページを開く

AtCoder Extension: Browse Task を実行すると、ブラウザで問題ページを開きます。

設定

ソースコードのひな形

独自のソースコードをひな形に使用する場合はフォルダ配下の template/template.c, template.cpp, template.java, template.py, template.js, template.ts に格納してください。

C/C++/Java 設定

自身の環境に合わせて vscode の設定を変更します。

設定名 内容 補足
C Checker gcc --version C コンパイラ存在チェック
C Compiler gcc $taskfile -o $execfile -lm C コンパイラ
C Executor $execfile C 実行ファイル
C++ Checker g++ --version C++コンパイラ存在チェック
C++ Compiler g++ $taskfile -o $execfile C++コンパイラ
C++ Executor $execfile C++実行ファイル
Java Checker javac --version Java コンパイラ存在チェック
Java Compiler javac -J-Duser.language=en $taskfile Java コンパイラ
Java Executor cd $tmppath && java Main Java 実行ファイル

パラメタを使用できます。

パラメタ名 記法 展開例
タスクファイル $taskfile C:\Users\...\project\src\atcoder\practice\practice_1.c
実行ファイル $execfile C:\Users\...\project\src\atcoder\practice\practice_1.exe
タスクフォルダ $taskpath C:\Users\...\project\src\atcoder\practice
プロジェクトフォルダ $projectpath C:\Users\...\project
一時フォルダ $tmppath C:\Users\...\AppData\Local\Temp\.ac-ts-extension
サイト $site atcoder
コンテスト $contest practice
タスク $task practice_1
拡張子 $extension .c

Python 設定

特にありません。

Go 設定

特にありません。

JavaScript 設定

特にありません。

TypeScript 設定

TypeScript のテスト実行には ts-node を使用しています。

  • 起動時間の短縮のためにトランスパイルのみしています(環境変数TS_NODE_TRANSPILE_ONLY=1)。そのため、ts-node 起動時の型チェックは行いません。
  • tsconfig.json があればそれに従います。

TypeScript のデバッグ実行には vscode のデバッグ機能から ts-node を呼び出しています。

  • tsconfig.json があればそれに従います。

プロキシ設定

プロキシ環境では環境変数HTTP_PROXYおよびHTTPS_PROXYを設定します。

set HTTP_PROXY=http://proxy.server:8080
set HTTPS_PROXY=http://proxy.server:8080

認証プロキシ環境では以下の形式で設定します。

set HTTP_PROXY=http://username:password@proxy.server:8080
set HTTPS_PROXY=http://username:password@proxy.server:8080