はじめに
キャンペーンをやっていたので、 Elixir で参戦しました
paiza とは
paiza は IT エンジニア向け転職・就活・学習サービスです
その中でも、 paiza ラーニングは初心者向けのプログラミング学習ができるようになっています
初学者向け AtCoder という感じですが、キャラクターが描かれていたりして、全体的にかわいい感じが良いです
回答に使える言語の選択肢に Elixir がありますが、まだ Beta とのこと
Elixir のバージョンは 1.12.3 で、結構古めです
残念ながら、スキルチェック問題では Elixir が選択できませんでした
本記事では、記事投稿キャンペーンの対象になっている問題から、 D ランクの問題を解いていきます
文字の一致
二つの入力文字列が一致しているかどうかを判定します
何も考えずに書いたコード
(最初は trim してなかったので失敗しました)
a = IO.read(:stdio, :line) |> String.trim()
b = IO.read(:stdio, :line) |> String.trim()
IO.puts(if a == b, do: "OK", else: "NG")
モジュール化して、 Elixir らしいパターンマッチを使ったコード
defmodule Paiza do
def main do
a = read_line()
b = read_line()
solve(a, b)
end
defp read_line() do
:stdio
|> IO.read(:line)
|> String.trim()
end
def solve(a, a), do: IO.puts("OK")
def solve(a, b), do: IO.puts("NG")
end
Paiza.main()
一番小さい値
入力された数値から最小値を返す
全てパイプで繋げました
defmodule Paiza do
def main do
:stdio
|> IO.read(:all)
|> String.trim()
|> String.split("\n")
|> Enum.map(&String.to_integer(&1))
|> Enum.min()
|> IO.puts()
end
end
Paiza.main()
足し算
入力した数値を足します
こちらも全てパイプで繋げました
Enum.map
が Elixir らしいですね
defmodule Paiza do
def main do
:stdio
|> IO.read(:all)
|> String.trim()
|> String.split(" ")
|> Enum.map(&String.to_integer(&1))
|> Enum.sum()
|> IO.puts()
end
end
Paiza.main()
Eメールアドレス
入力された行を @
で接続します
改行を @
に置換するだけですね
defmodule Paiza do
def main do
:stdio
|> IO.read(:all)
|> String.trim()
|> String.replace("\n", "@")
|> IO.puts()
end
end
Paiza.main()
N倍の文字列
入力された数値の分だけ *
を出力します
Elixir 1.12 なので then
が使えます
defmodule Paiza do
def main do
:stdio
|> IO.read(:all)
|> String.trim()
|> String.to_integer()
|> then(&String.duplicate("*", &1))
|> IO.puts()
end
end
Paiza.main()
まとめ
D ランクなので、全て超入門という感じですね
早く Elixir でスキルチェック問題が回答できるようにしてもらいたいです