2021年1月15日に加筆訂正 文体を修正・Codeforcesに提出できると読み取れるのでその文を修正
WSLでonline-judge-toolsを使いました。 最近サンプルケースも通らない提出をすることが増えたので、online-judge-toolsを導入することにした。 今までGUI環境がないWSLではonline-judge-toolsの多くの機能が使えないと勘違いしていました。 メモする。
この記事は2020年11月10日書かれたものですので、記事の内容は誤りになる可能性があります。
WSLとは
Linux 用 Windows サブシステムを使用すると、開発者は、従来の仮想マシンまたはデュアルブート セットアップのオーバーヘッドなしで、ほとんどのコマンド ライン ツール、ユーティリティ、アプリケーションを含む GNU/Linux 環境を変更せずそのまま Windows 上で直接実行できます。 アクセス日:2020年11月10日 https://docs.microsoft.com/ja-jp/windows/wsl/about
WindowsでGCCを使うためにWSLを使います。 WSLの似たようなものとしてCygwinやMSYS2(MinGW)があります。 私にはWSLとCygwinとMSYS2(MinGW)のどれを選ぶべきなのかわかりません。 新しい・MSが力を入れている・知見の多いUbuntuを使える(この表現は怪しい)のでWSLを使います。
online-judge-toolsとは
oj
コマンドは競技プログラミングを行う上で存在する典型作業を自動化するためのコマンドです。 アクセス日:2020年11月12日 https://github.com/online-judge-tools/oj/blob/master/docs/getting-started.ja.md
次のことができる。
- テストケースのダウンロード。
- 自動テスト。
- コマンドで提出。
online-judge-toolsを使おう
私は今まではonline-judge-toolsを使っていませんでした。 online-judge-toolsはコンテストサイトにログインするときにGUIを使います。 なのでGUI環境が無いWSLでは使えないと思っていました。 ですがWSLでも使えるようです。
まず(コンテスト中の問題を除いて)テストケースのダウンロードとテストはログインしていなくてもできる。 ログインだが、AtCoderとCodeforcesはCLIからログインできるし、他のサイトではWindowsからログインすればよかった。
公式ドキュメントを読もう
下準備
- OSはWindows 10。
- ブラウザがインストールされているものとする。
- Python3をインストール。
- pipよりonline-judge-tools, Seleniumをインストール。
- WebDriverをインストール。
- Ubuntu(WSL)をインストール。
- WSLのAPTよりpython3-pipをインストール。
- WSLのpip3よりonline-judge-toolsをインストール。
次をすべて満たしたら下準備が終了です。
- Seleniumを起動できる。
oj
コマンドが使える。- WSLの
oj
コマンドが使える。
WSLのpip3よりonline-judge-toolsをインストールすると、パスが通っていないという警告が出たので通しました。
# シェル: fish WSLのユーザー: hotaru_wsl set -U fish_user_paths /home/hotaru_wsl/.local/bin $fish_user_paths
Python・WSL・Seleniumの準備はほかの解説を読んでください。
設定
online-judge-toolsはSupported websitesのsubmit codeが✔️のサイトに提出できる。
今回はyukicoderのこの問題に提出する。
サンプルケースのテスト
問題のサンプルケースをダウンロードする。
# WSL oj d https://yukicoder.me/problems/no/9010
サンプルケースをテストする。
# WSL # ./a.outがテストするプログラムとする。 oj t
提出
WSLより提出しようとするとログインしろとエラーが出る。
# WSL # main.cppが提出するファイルとする。 oj s main.cpp # 前略 [ERROR] You are not logged in. Please run $ oj login https://yukicoder.me/problems/no/9010
ログインしようとするとエラーが出る。
# WSL oj login https://yukicoder.me/problems/no/9010 # 前略 [ERROR] No WebDriver is available. [HINT] Please install a WebDriver. See https://www.selenium.dev/documentation/en/webdriver/driver_requirements/ Detailed instructions: If you use Ubuntu: 1. Run $ sudo apt install chromium-chromedriver firefox-geckodriver If you use Ubuntu under Windows Subsystem for Linux: 1. Make a symbolic link from cookie.jar in WSL to cookie.jar out of WSL. For example, run $ ln -s /mnt/c/Users/%USERNAME%/AppData/Local/online-judge-tools/online-judge-tools/cookie.jar /home/ubuntu/.local/share/online-judge-tools/cookie.jar 2. Use `oj login` outside of WSL If you use Windows: 1. Install Chocolatey. See https://chocolatey.org/ 2. Run > choco install selenium-all-drivers # 省略
エラーを読むとWSLの場合の対処法が書いてある。 これを行う。
シンボリックリンクを作成する。
例のコマンドの%USERNAME%
をWindowsのユーザー、ubuntu
をWSLのユーザーに置換して実行する。
# WSL # Windowsのユーザー: hotaru_win WSLのユーザー: hotaru_wsl ln -s /mnt/c/Users/hotaru_win/AppData/Local/online-judge-tools/online-judge-tools/cookie.jar /home/hotaru_wsl/.local/share/online-judge-tools/cookie.jar
Windowsでyukicoderにログインする。
# Windows oj login https://yukicoder.me/problems/no/9010
では提出します。
# WSL # main.cppが提出するファイルとする。 oj s main.cpp
おわり
- online-judge-toolsをこれから使いこなしていきます。
- 使いたいオンラインジャッジへの提出に対応していなかったのが少し残念(contributeチャンスですよ!)。
- Codeforcesに提出する機能は消えました。詳しくはIssue参照。
- ojするVSCodeのビルドタスクを作る。