Panda Noir

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

ABCのA問題で二度とWAしないためのツールを作りました

github.com

その名も「失敗は死(Failure is Death)」です。たぶん英語としては間違えてますが、カッコイイのでこのままで。

機能

AtCoderのコードテストをちょっと強くしたものになります。複数のテストケースを同時に試せるので、コードの書き換えをしたあとの検証などで利用できます。A問題でいちいち準備したりするのが億劫だったのでこのような形式になりました。

たとえばこの問題の場合は次のような感じで試すことができます(この問題が結構すき)。

f:id:panda_noir:20190821203109p:plain

execを押すと、以下のようにテストケースそれぞれの出力を表示します。 f:id:panda_noir:20190821203118p:plain

内部としては

  1. コードとテストケースを受け取る
  2. 外部コマンド(sedなりRubyなり)を呼び出す
  3. 実行結果を表示する

となっているので、たとえばRubyでジャッジしたい場合はあらかじめRubyを入れる必要があります。

開発の流れ

今回はRustを使って作ってみました。GUIの開発だったので、Gtkを使いました。

作ってて思ったことをいくつか。まず、入力フォーム一つ作るのに非常に苦労しました。まず、どれがフォームを指しているのかを調べるところから始まりました。結論としてはEntryが1行のみの入力フォーム、TextViewが複数行のフォームのようです。ただし、これらはundoすらできないので、SourceViewというところのViewを使うのをおすすめします。

また、テキストボックスのサイズの設定が未だにわかりません。どうすればいいのやら…

参考資料