Clojure を使える online judge まとめ

結論：思った以上に選択肢が少なそう

最近 [Clojure for the Brave and True](http://www.braveclojure.com/)という本（オンラインでは無料で読ませてくれます）で Clojure の勉強を始めました．動機は i) もうひとつ何かやりたくて，それは関数型で書きやすい言語が良かった ii) lisp 系のどれかをやってみる必要を感じていた iii) GAE とか Processing とかと合わせられそう，js にコンパイルできるのも使いでがありそうとちょっと思った あたりです．以前 Scheme をやりかけて投げたことがあったのですが，動機が増えたこと，SICPを途中まで読んだことで以前感じていた「同じ括弧とものの並びでも場所と文脈によって全然やることが違うじゃないか気持ち悪い」感をうまく乗り越えられたこと(あと，Clojure がその辺を多少整理した構文になっていること)，そしてこの本がよく書かれていることによって，今回は続きそう，ひょっとしたら目覚められそう．Clojure をはじめたい方は覗いてみるといいと思います．

さて，新しい言語を覚える時には皆様色々なことをなさると思いますが，基本構文に慣れたり，`readLn` ってどう書くんだろう，というようなシンプルで退屈な細部を把握していくモチベーションを維持する上でオンラインジャッジの類を利用される方も多いと思います．ということで Clojure を使えるオンラインジャッジの類をまとめてみました．

何分 Clojure をはじめたてなもので大掛かりな処理を書くことができず，"そこにある問題を Clojure で現実的に解けるか" についてはほとんど評価できていません．また（有名どころを集めた積りではありますが）個々のサイトの信頼性については担保しませんのでその点ご容赦願います．


## 4th Mar 2016 時点で対応してるサイト

<table>
  <th>
    <td>バージョン</td>
    <td>time limit とか</td>
  </th>
  <tr>
    <td><a href="http://atcoder.jp/">AtCoder</a></td>
    <td><a href="http://arc048.contest.atcoder.jp/faq">1.1.0 + OpenJDK 1.7</a></td>
    <td>単純な問題で 2秒</td>
  </tr>
  <tr>
    <td><a href="http://www.spoj.com/">Sphere Online Judge (SPOJ)</a></td>
    <td><a href="http://www.spoj.com/submit/">1.7</a></td>
    <td>問題による．</td>
  </tr>
  <tr>
    <td><a href="https://codeeval.com/">codeeval</a></td>
    <td><a href="https://www.codeeval.com/open_challenges/1/submit/">1.8.0</a></td>
    <td>10秒</td>
  </tr>
  <tr>
    <td><a href="https://www.codingame.com/">CodinGame</a></td>
    <td><a href="https://www.codingame.com/faq">1.6.0 - Oracle JVM 1.8 </a></td>
    <td>入力1行毎に応答を返し100ms以内みたいな形式が多い</td>
  </tr>
  <tr>
    <td><a href="https://www.codechef.com/">codechef</a></td>
    <td><a href="https://www.codechef.com/wiki/list-compilers">1.7</a></td>
    <td></td>
  </tr>
  <tr>
    <td><a href="http://www.4clojure.com/">4clojure</a></td>
    <td>たぶん1.4</td>
    <td>(-)</td>
  </tr>
</table>

Clojureの場合自身の処理速度より起動速度が問題になる場合があり，たとえば AtCoder ではこれに2秒弱取られてしまいます．2秒でTLEになる問題で計算量のある問題はそもそも厳しいかもしれません．Spoj についても <a href="http://discuss.spoj.com/t/clojure-time-limit-exceeded/9758">(参考)</a> のようにこの問題はあるようです([TEST](http://www.spoj.com/problems/TEST/)で試した感じ起動におよそ1秒かかっているようです)．

その点 codeeval は10秒あるので大丈夫…と思ったら[メモリをモリモリ食いながら異様に遅い](https://getsatisfaction.com/codeeval/topics/clojure_time_memory_stats_seem_wrong)という問題があって解決されてないらしい．

Codingame はしばしば「ターン」毎に入力があってそれを読んでは応答を返すという形式があり，各応答に対して例えば100msなどという制限がかけられています．試した所一番簡単な問題について Clojure で書いたコードは普通に通ります(つまり最初起動に1秒とか多分かかってるのは無視してくれてるのかな？)．

Codechef は探したら名前が出てきたので記載しましたが僕自身は使ったことがなくよくわかりません．すみません．

4clojure はどちらかというと koans っぽい作りになっていてそういうのはないです．


## 4th Mar 2016 時点で対応してないっぽいサイト

* [AIZU ONLINE JUDGE](http://judge.u-aizu.ac.jp/onlinejudge/) - [ここ](http://judge.u-aizu.ac.jp/onlinejudge/status_note.jsp?tab=2)をみた
* [Codeforces](http://codeforces.com/) - [ここ](http://codeforces.com/blog/entry/79) をみた
* [yukicoder](http://yukicoder.me/) - [実行環境](http://yukicoder.me/help/environments)

## まとめ

* AtCoder や spoj では起動時間によるTLEのためにそもそも解け得ない問題と出会うかもしれない．
* codeeval もちょっとややこしい状況のようだ．
* CodinGame はそもそもサイトの方向性からして毛色が違うが，それでいいなら比較的 Clojure を使いやすいのかもしれない．
* Codechef というものがあるが僕がよく知らないので何も書けない．

他のサイトをご存じの方はコメントや編集リクエストなどで教えていただければと思います．(もちろん上記に誤りがあったらそれも教えてください）．