中野's workspace

  • Profile
  • Privacy
  • Contact

2021/03/10

Elixirで入力値取得いろいろ

  • #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

参考リンク

このエントリーをはてなブックマークに追加
  • Copyright © 2019. Makoto Nakano
  • ALL Tags