Paizaの問題をElixirで解こう
実は最近までElixirで問題を解けることを知らなかったのでLivebookでローカル環境で問題を解けるようにしました。
公開したリポジトリ
きっかけ
Paizaの問題をJavaScriptで挑戦していて、Aランクの問題が再帰を使わないと解けない問題に遭遇しました。
その問題はN ≤ n_i ≤ 1000
の範囲だったので問題なかったのですが、10,000
や100,000
になるとスタックエラーを起こす可能性があることに気づきました。
JavaScriptでも再帰をうまく扱う方法がありますが(generatorとか)、他の言語で戦いたくなりました。
Paizaの利用可能な言語の一覧にはHaskell
とかRust
とか私の得意な言語がありましたが、よく見たら下の方にElixir
があることに気づきました。
ElixirにはLivebookがあるのでPaizaのテンプレートを作りたくなったので作成して公開しました。
一番苦労した、しかし簡単に解決した課題
最初に直面した問題は標準入力で一度に複数行のインプットを取得する方法が見つからない、でした。
ElixirのIO
のドキュメントを読んでも一度に複数行が見つからず、Googleでpaiza elixir 標準入力 複数行
等で検索したが出てきません。
結果、発見的方法でしたが、次のようにすれば一度に複数行のインプットを取得できました。
:stdio |> IO.read(:all)
使い方
公開したリポジトリのREADME.mdを参考にしてください。
- forkして使ってください。
- forkしたら非公開(Private)なプロジェクトで作業して下さい。Paizaは問題と答えを非公開にするように求めています。
-
asdf installl
、git clone
、docker compose up -d
するだけで動きます。 - ポートやauthを変えたい場合は
.env
ファイルなりdocker-compose.yml
を編集してください。 - 編集したら
/livebook
ディレクトリに保存されます。
準備はできましたか?
ElixirでPaizaの問題をたのしみましょう!😍
終わりに
きっと誰かが同じようなことをやっているだろうけど、調べずに自分で作りたかった。