2021/03/10
Elixirで入力値取得いろいろ
atcoderでElixirが使えると知り、競プロやってみたい&Elixir勉強したい自分にはぴったりだと思い、始めてみることにしました。
手始めに競プロやる上でよく使いそうな入力値の受け取り方法を列挙していきます。
atcoderでelixir使う時の形式
atcoder-ルールによると、atcoderではコード提出時、Main.main
が実行されるみたいです。
そのため、下記をテンプレートとして、mainの中に処理を書いていく必要があります。
main.exs
defmodule Main do
def main do
# ここに処理を記載
end
end
省略しますが、以降のコードは全てMain.main
の中に処理を記載します。
elixirで入力値受け取り
文字列
input
a
code
a = IO.gets("") |> String.trim
数値
input
1
code
n = IO.gets("") |> String.trim |> String.to_integer
空白で分割された文字
文字列で受け取る場合、以下のコードのようにします。
input
a b
code
n = IO.gets("") |> String.trim |> String.split
数字の場合は下記です。
input
1 2
code
[a,b] = IO.gets("")
|> String.trim
|> String.split
|> Enum.map(&String.to_integer/1)
複数行
input
a
b
c
d
e
下記コードでリストとして受け取れます。
code
l = for _ <- 1..5, do: IO.gets("") |> String.trim
# 行数が可変の場合
n = IO.gets("") |> String.trim |> String.to_integer
l = for _ <- 1..n, do: IO.gets("") |> String.trim
空白で分割された文字が複数行
input
3 5
a b c d e
a b c d e
a b c d e
下記コードで2次元のリストとして受け取れます。
code
[x,y] = IO.gets("")
|> String.trim
|> String.split
|> Enum.map(&String.to_integer/1)
l = for _ <- 1..y, do: IO.gets("") |> String.trim |> String.split