AtCoderの問題を解くとき、入力の処理ってどうしてますか?
私は、定型のひな形を用意して使っています。
Pythonで解く場合に使っている、atcoder-toolsのテンプレートに同じような仕組みがあったので、Elixirでも実現してみました。
区切り文字まで読み込む部分は、再帰を使って、簡素に書けたので気に入ってます。
defmodule Main do
import Bitwise
def next_token(acc \\ "") do
case IO.getn(:stdio, "", 1) do
" " -> acc
"\n" -> acc
x -> next_token(acc <> x)
end
end
def input(), do: IO.read(:line) |> String.trim()
def ii(), do: next_token() |> String.to_integer()
def li(), do: input() |> String.split(" ") |> Enum.map(&String.to_integer/1)
end
使用例
例えばABC331Aの入力はこんな形式です。
この場合は、次のように、ii()を順に呼び出していけば値を取得できます。
def main() do
end_of_month = ii()
end_of_day = ii()
y = ii()
m = ii()
d = ii()
end
C問題以降のデータ量の大きい問題では、読み込みだけでTLEになる可能性があるので、TLEになった時は、この部分も疑ってみてください。
ElixirでAtCoder参加してみよう(atcoder-toolsの導入)に使用例などもあるので見てみてください。