Intro
ちょっとEmacsで競技プログラミングをしてみようかと思いました。
どうやらoj、oj-templateという便利なツールがあるようなので、Emacsから簡単に実行できるようoj.elというパッケージを作成しました。
oj, oj-template
ojは多数のオンラインジャッジに対応しているCLIツールです。
オンラインジャッジによって実装されている機能に制限はありますが、サンプルケースのダウンロード、テスト、提出、ランダムインプットの生成などの機能があります。
さらにoj-templateは入出力サンプルからそれっぽいcppとpythonファイルを生成してくれます。
また、 oj-prepare
はコンテストURLを指定すると、そのコンテストの全ての問題について oj donwload
と oj-template
をしてくれます。
コンテスト中は時間との戦いなので、これらのコマンドによる時短は大きなものになると思います。
oj.el
oj.elは先般の oj
, oj-template
をEmacsから実行できるようにしたものです。
(leaf oj
:ensure t
:custom ((oj-compiler-c . "clang")
(oj-compiler-python . "pypy")
(oj-default-online-judge . "atcoder")))
単に関数にバインドしただけでなく、多少の改善を入れています。
例えば oj
はダウンロードするためにURL全体を指定する必要がありますが、 oj-default-online-judge
で設定されているオンラインジャッジを規定のものと考え、入力を省略できるようにしています。
(CLIツールとしての方針と干渉するものではなく、エディタの拡張としての求められる機能として盛りこんだものです。)
例えば atcoder
デフォルトに設定されている状況で、 M-x oj-prepare
に abc167
を入力すると下記コマンドが実行されます。
oj-template https://atcoder.jp/contests/abc167
さらに、 abc167/a
と入力すると下記コマンドが実行されます。
oj-template https://atcoder.jp/contests/abc167/tasks/abc167_a
このように推測できる部分については、より推測するように実装しています。
詳しい使い方についてはREADMEを参照して下さい。
基本的に oj-install-package
, oj-prepare
, oj-test
, oj-submit
の順にコマンドを実行すればいい感じに動くはずです。
まとめ
ojをEmacsから使いやすくするラッパーパッケージを書きました。
こういう方向のパッケージもお手軽で良いですね。