Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

Codeforcesで精進するときに便利なツールの紹介

github.com

今回はこちらのツールを紹介します(なぜか日本語記事でCodeforces向けのツール紹介がなかったので)

ツール概要

このツールは以下のような便利機能を提供しています。

  • テストケースのダウンロード・ディレクトリセットアップ
  • テンプレートファイルからコードの生成
  • 提出
  • コンテストへの参加・カウントダウン表示

online-judge-toolsやatcoder-cliをご存知なら、それのCodeforces版のようなものです。

インストール

コンパイル済みのバイナリをダウンロードするか、ソースコードからビルドします。

ダウンロードはこちらから Releases · xalanq/cf-tool · GitHub

ソースコードからビルドする場合は次のようになります。Goがインストールされている必要があります。

$ go get github.com/xalanq/cf-tool
$ cd $GOPATH/src/github.com/xalanq/cf-tool
$ go build -ldflags "-s -w" cf.go

ログイン

インストールしたら、まずCodeforcesへログインします。cf configコマンドを実行し、なにを設定するか問われるので0と入力してログイン設定へ進みます。その後必要な情報を入力してログインします。

使用例

たとえば Problem - 279B - Codeforces こちらの問題を例に見てみます。

  1. テストケースをダウンロード: cf parse 279
  2. ディレクトリへ移動: cd ./cf/contest/279/b
  3. ファイルを編集: code b.cpp
  4. テスト: cf test
  5. 提出: cf submit

atcoder-cliと似ていることが分かるかと思います。

cf submitすると、コードのジャッジ状況がターミナル上に表示されて更新されていきます。提出結果を確認するためだけにブラウザを開かずに済むので楽です。

ちょっとだけ便利にする

軽いラッパーを噛ませて、cf tでテスト、cf sで提出できるようにします。

以下はzsh用のラッパーになります。

cf() {
    if [ "s" = "$1" ]; then
        command cf submit ${@:2}
    elif [ "t" = "$1" ]; then
        command cf test ${@:2}
    else
        command cf ${@:1}
    fi
}