2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Elixirに知識ゼロの状態から入門した感想【電脳少女プログラミング2088 ─壊レタ君を再構築─】

Posted at

はじめに

paizaとqiitaのコラボキャンペーンがあることをたまたま目にし、せっかくなので全く触ったことのない言語で問題を解いてみることにしました。選んだのはElixirです。理由は響きがなんかカッコよかったので。

問題

スクリーンショット 2025-02-24 23.08.32.png

コード

n = IO.gets("") |> String.trim() |> String.to_integer()
numbers = Stream.repeatedly(fn -> IO.gets("") end) |> Stream.take(n) |> Enum.map(fn line -> String.trim(line) |> String.to_integer() end)

max_number = Enum.max(numbers)
IO.puts(max_number)

ポイント

入力の受け取り

n = IO.gets("") |> String.trim() |> String.to_integer()

IO.gets("")で標準入力を受け取ることができます。これだけだと改行文字も含まれてしまうので、String.trim()で改行文字を取り除き、String.to_integer()で整数変換します。こうやって、左から右に順番に処理を進めていくのを、|>という記号で表しているわけですが、これを「パイプライン演算子」と呼ぶらしいです。

numbers = Stream.repeatedly(fn -> IO.gets("") end) |> Stream.take(n) |> Enum.map(fn line -> String.trim(line) |> String.to_integer() end)

Stream.repeatedly(fn -> IO.gets("") end)で1行ずつ読み込んでいきます。ストリームで受け取るのでこれだけだと無限に取ってきてしまいます。
そこで、Stream.take(n)でn個だけ要素を取り出すように指定してあげます。これによりnumbersという名のn個の配列ができます。

Enum.map(fn line -> String.trim(line) |> String.to_integer() end)では、n個の要素に対して改行記号の除去と、整数変換をします。

最大値を計算する

max_number = Enum.max(numbers)

Enum.max(numbers)で、numbers配列の中で最も数が大きいものを出力してくれるみたいです。

出力

IO.puts(max_number)

IO.puts(max_number)で標準出力です。

おわりに

普段Pythonを使っている身としては、雰囲気がPythonに似ているので簡単な言語だと感じました。パイプライン演算子はPythonにないですが、機械学習でパイプライン処理は学んだことがあったので、理論的なところはすぐに理解できました。なのでElixirとは仲良くやっていけそうです。

一方で、記事を書くことも初めてだった訳ですが、そちらの方がずっと難しいと思いました。読みにくい部分が多々あるかと思いますが、プログラミングの技術共々上達させていきたい所存です。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?