Akihito Ikeda

2021年01月19日

posts/2021-01-19diary

プログラミングElixir(第2版)』にひととおり目を通した。まだよくわからないことだらけなので実際に何か書いてみたい。写経とかせずに読んだけど、サンプルで載ってるコードもけっこう面白そうだったのでとりあえずそれを書いてみて雰囲気を掴むのがいいかもしれない。

とてつもなく簡単な例だけど、プロセスを使った並行処理を、プロセスの生成->メッセージを待ち受け->値の統合という形で書いてみた。 当たり前かもしれないけどちゃんとAtCoderでも動くんだなあ、感動した。

defmodule Main do
  def main do
    IO.read(:line)
    |> String.trim()
    |> solve()
    |> IO.puts()
  end

  def solve(s) do
    me = self()
    String.codepoints(s)
    |> Enum.map(fn n ->
      spawn fn -> (send me, { :ok, String.to_integer(n) }) end
    end)
    |> Enum.map(fn _ ->
      receive do {:ok, res} -> res end
    end)
    |> Enum.sum()
  end
end

https://atcoder.jp/contests/abs/submissions/19528654

© Akihito Ikeda - Last update 25.02.2021 17:06.