rlr(Recursion Local Runner)は、RecursionCSで公開されている問題を、ローカル環境で実行するためのツールです。
以下の特徴があります。
- ReucsionCSから、問題のテストケースをローカルに取得する。
- 指定されたコマンドで、取得したテストケースのローカルジャッジを実行する。
- ローカルで実行できるので、RecusrionCSのエディタでサポートされていない言語でも問題を解くことが可能。
また、ローカルで実行できるため、好きなエディタで編集、実行が可能となっています。
vim
neovim
Emacs
Spacemacs
nano
VScode
Eclipse
IntelliJ
サクラエディタ
秀丸エディタ
メモ帳
and more...
インストールで必要な作業は2つです。
- ファイルの取得
- インストールの実行
Gitリポジトリをクローン、もしくはzip
でダウンロードして下さい。
zip
でダウンロードの場合は、画像の様に、Download ZIP
をクリックして下さい。
ファイルがローカルに保存されますので、ファイルを解凍して下さい。
ローカルにgit
コマンドがインストールされている場合は、以下の様にクローンすることでもファイルを取得できます。
こちらはzip
圧縮されていないので、解凍の必要はありません。
git clone https://github.com/kip2/rlr.git
インストール方法は、プラットフォームにより差があります。
実行権限を与えて、install.sh
を実行して下さい。
# 実行権限の付与
chmod +x install.sh
# インストールの実行
./install.sh
# もしくはbashで起動する
bash install.sh
インストールの確認として、バージョン情報の出力を確認して下さい。
# オプションのVは大文字なことに注意する
rlr -V
# もしくは
rlr --version
コマンドプロンプト(cmd
)、もしくはPowerShellでディレクトリを開き、 install.bat
を実行して下さい。
install.bat
インストールの確認として、バージョン情報の出力を確認して下さい。
# オプションのVは大文字なことに注意する
rlr -V
# もしくは
rlr --version
uninstall.sh
に実行権限を与え、その後実行して下さい。
# 実行権限の付与
chmod +x uninstal.sh
# uninstallの実行
./uninstall.sh
# もしくは
bash uninstall.sh
コマンドプロンプト(cmd
)、もしくはPowerShellでダウンロードした本リポジトリのディレクトリを開き、 uninstall.bat
を実行して下さい。
uninstall.bat
rlr
の使用にあたっては、以下の手順が必要です。
- RecursionCSへの初回ログインを実施する(
login
コマンド)。 - RecursionCSから問題のテストケースをダウンロードする(
download
コマンド)。 - 問題を解くコードを、好きなエディタで書く。
- 3で書いたコードで、問題が解けるかのジャッジを実行する(
judge
コマンド)。
RecursionCSは会員制サイトとなっています。 そのため、あらかじめログインする必要があります。
初回ログインとして、以下のログインコマンドを実施して下さい。
rlr login
# もしくは
rlr l
コマンド実行後、メールアドレスとパスワードを入力すると、ログイン処理が実行されます。
NOTE: なお、一度ログインをした後は、認証期限がこないうちは再度のログイン実行は不要です。 認証期限が切れている場合は再度ログインを実行して下さい。
ログイン後、問題ページのテストケースをダウンロードします。
ダウンロードしたい問題ページを開き、URLを確認、もしくはコピーして以下のコマンドを実行して下さい。
rlr download "https://recursionist.io/dashboard/problems/1"
# もしくは
rlr d "https://recursionist.io/dashboard/problems/1"
ダウンロードされると、problem-問題番号
の名前でディレクトリを作成し、その中にテストケースを記載したファイルのtestcase
ディレクトリが作成されます。
└── problem-1
└── testcase
├── testcase-1.in
├── testcase-1.out
├── testcase-2.in
├── testcase-2.out
├── testcase-3.in
├── testcase-3.out
├── testcase-4.in
├── testcase-4.out
├── testcase-5.in
└── testcase-5.out
NOTE:
template
ディレクトリが配置されている場合、その中身も一緒にコピーしてくれます。 解きたい言語のテンプレートファイルなどを用意して置くと、毎回ファイル作成して環境を構築する手間が省けます。template
の例を含め、環境構築の方法については各言語でのrlrの使い方に、言語毎の例が記載されていますので、参照して下さい。
好きなエディタを用いて、問題を解くコードを記載して下さい。
初心者の方向けに、問題の解き方で基礎となる考え方を記載しました。
詳細は問題の解き方を参照して下さい。
問題を解くコードを記載したら、テストケースを用いてジャッジを行います。
ジャッジを実行するには、ダウンロードしたテストケース(problem-1
)が存在するディレクトリで、judge
コマンドを使用する必要があります。
└── problem-1 # <- このディレクトリに移動して実行する。
└── testcase
├── testcase-1.in
├── testcase-1.out
├── testcase-2.in
├── testcase-2.out
├── testcase-3.in
├── testcase-3.out
├── testcase-4.in
├── testcase-4.out
├── testcase-5.in
└── testcase-5.out
具体的には、problem-1
ディレクトリに移動してからjudge
コマンドを実行すると良いでしょう。
# problem-1の例
cd problem-1
judege
コマンドは以下のような構造になっています。
# <command>はシェルで実行可能なコマンドを実行して下さい。
rlr judge "<command>"
指定できるコマンドは、シェルやコマンドプロンプトで実行できるコマンドを指定して下さい。
例えば、python
コードをmain.py
に記載した場合は、以下のようなcommand
を指定して下さい。
# pythonの例。main.pyの実行を行う。
rlr judge "python3 main.py"
NOTE: 指定する
command
は必ず文字列である必要があります。""
で囲って下さい。
NOTE:
rlr
は、input
となるテストケースを標準入力で受け取り、judge
で指定したcommand
に対してパイプ処理で受け渡して処理した後、標準出力をoutput
のケースと比較します。 つまり、標準入力を受け取って出力可能なcommand
なら何でも使えます。手元で実行ができるならどんな言語でも大丈夫ということです。
処理が実行され、各テストケースの結果が表示されます。
コマンドを忘れたら、help
コマンドを実行して下さい。
NOTE: 他のコマンドと違って、
-
が頭につくことに注意して下さい。
rlr -h
# 詳細なhelp
rlr --help
当リポジトリは、皆さんからのフィードバックをお待ちしています。
rlr
はまだ作成されたばかりの未熟なアプリです。 そのため、ぜひ、皆さんのフィードバックをいただければと考えています。
- 使い勝手で改善してほしい部分,
- 欲しい機能,
などがあればissueを投げて下さい。
また、ツールとして最低限動く部分については作成しましたが、実際に各言語でどの様に実行するか、といったところのドキュメントが未整備となっています。
現在、いくつかの言語の例は追加していますが、Recursion側がサポートしている言語のドキュメントも未整備の状態です。
また、自分の好きな言語での解き方ドキュメントも歓迎しています。
手元で実行さえできればどんな言語でも大丈夫です(COBOL
, FORTRAN
, zig
, Hasklell
, brainf*ck
, etc...)。
ご協力いただける方は、ぜひドキュメント追加のPull Requestを投げて下さい。
「チーム開発参加怖いけど、PRの練習をしたい!」というかつての私のような方でも歓迎しています。
Pull Requestの出し方についてもまとめましたので、ご協力いただける方は以下のドキュメントをご参照下さい。
rlr
は oj に、インスパイアされて作成しています。
This project is licensed under the MIT License.