LoginSignup
12
2

Elixir AtCoder用テンプレート

Last updated at Posted at 2023-12-11

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の入力はこんな形式です。

image.png

この場合は、次のように、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の導入)に使用例などもあるので見てみてください。

12
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
2