tatsumack blog

エンジニアによる雑記です

CLionの競技プログラミング用プラグイン「JHelper」の紹介

最近、競技プログラミング界隈でCLionユーザーが増えてきている気配を感じたので、CLionのJHelperという競技プログラミングに特化したプラグインを紹介しようと思います。
plugins.jetbrains.com

JHelperは、
・サンプルケースの取得
・取得したケースに対するテストの実行
といった競技プログラミングをする際の典型作業をCLion上でいい感じに自動化してくれます。

使用例

1. 問題ページを開いて拡張機能のボタンをポチっと押す

f:id:tatsumack:20190718154549p:plain

2. CLion上で問題のConfigurationの作成&cppファイルの作成が自動で行われる

f:id:tatsumack:20190718160105p:plain

3. Runするとサンプルケースのテストを実行することができる(もちろんデバック実行もできる)

f:id:tatsumack:20190718160143p:plain

上記の使用例はAtCoderですが、Codeforcesなど主要なコンテストはだいたい対応しています。
対応コンテスト一覧

その他の機能

Configurationの自動切り替え
CLion上で開くファイルを切り替えるとConfigurationも自動で切り替わります。
複数の問題を解いているときに、Configurationを切り替え忘れていて別のファイルを実行してしまった、というありがちなミスを回避することができます。

コンテストごと丸っとダウンロード
コンテストページ上で拡張機能ボタンを押すと、そのコンテストに含まれる問題すべてをパースしてくれます。

自作テストの追加
もちろん自身が定義したテストケースを追加できます。

自作ライブラリの埋め込み
わざわざコピペしなくても、自作ライブラリをソースコードに埋め込んでくれます。
(私自身あんまり使っていない機能なので使い勝手はよく分からない)

他にもいろいろな機能があるので、興味がある方は JHelperのWiki を見てみてください。

インストール方法

1. JHelperプラグインをインストール
JHelper - Plugins | JetBrains

2. ブラウザの拡張機能をインストール
Chrome
Firefox

3. ToolBarにJHelperのアクションを追加
Preferences > Appearance & Behavior > Menus and Toolbars > Main Toolbar
を開いた状態で +ボタンを押して、
Add Action > Plug-ins > JHelper
で表示されたアクションをすべて追加します。
f:id:tatsumack:20190720002850p:plain

↓のようにツールバーにJHelperのアクションが追加されます。
f:id:tatsumack:20190723111119p:plain

4. サンプルプロジェクトのダウンロード
GitHub - AlexeyDmitriev/jhelper-example-project: Example project for JHelper
git cloneするなりして、上記のサンプルプロジェクトをダウンロードしてください。

簡単にディレクトリ構成を説明すると、
library/ ... 自作ライブラリを置くディレクト
tasks/ ... 問題ごとのcppファイルが追加されるディレクト
testrunnner/ ... テスト実行用のファイルが生成されるディレクト
output/ ... 提出用のファイルが生成されるディレクト
となっています。

tasks/配下の問題ファイルにコードを書き、Runすることで testrunner/配下にテスト実行用ファイル、output/配下に提出用ファイルが生成される、という仕組みになっています。
ディレクトリ構成はJHelperの設定から変更することも可能です。

5. お好みでテンプレートを修正
task.template ... 問題ごとのcppファイルのテンプレートです。私はよく使うマクロを定義しています。
jhelper-projects/task.template at master · tatsumack/jhelper-projects · GitHub

testrunner.template ... テスト実行ファイルのテンプレートです。私は出力結果に色をつけたりしています。
jhelper-projects/run.template at master · tatsumack/jhelper-projects · GitHub

submisiion.template ... 提出用ファイルのテンプレートです。私は特にいじってません。

6. 実際に使ってみる
上記で作ったプロジェクトをCLionで開いて、AtCoderCodeforcesの問題ページを開いた状態でブラウザの拡張機能のボタンを押してみてください。
CLion上にConfigurationが生成されて、問題のファイルが生成されます。

ファイルには↓のようにclassとsolveメソッドが定義されています。
f:id:tatsumack:20190723105347p:plain
solveメソッドにコードを書いていきます。
入出力はsolveメソッドの引数で渡されたものを使う必要があるので注意してください。

実装ができたら、f:id:tatsumack:20190723105636p:plain ボタンを押してテストケースを実行します。
問題なければ、output/配下に生成されたmain.cppファイルを提出します。

ここまで問題なくできれば、設定完了です。

あとは簡単にツールバーの各アクションの説明をすると、

f:id:tatsumack:20190723103109p:plain … Configurationの削除を行う
f:id:tatsumack:20190723103123p:plain … テストケースの編集を行う
f:id:tatsumack:20190723103125p:plain … Configurationの追加を行う(ブラウザの拡張機能から追加できるのであんまり使わない)
f:id:tatsumack:20190723110455p:plain ... JHelperの設定を変更する。生成ファイルの出力先を変更できたり。
f:id:tatsumack:20190723103128p:plain … 提出用のファイルをクリップボードにコピーする。
f:id:tatsumack:20190723103130p:plain … コンテストごと丸っとパースする(AtCoderは未対応。ブラウザの拡張機能から実行できるのであんまり使わない)
といった感じになっています。

まとめ

JHelperはいいぞ。

ちなみにCLion自体は有料の製品です。(学生は無料)
サムライズムというJetBrainsの公式代理店で購入する場合、↓の紹介リンク経由で購入すると少し安く買えるので良かったらぜひ。
JetBrains製品 紹介リンク