パスカルの三角形(Elixir)
obelisk.hatenablog.com
ここで Ruby でやっていることを、Elixir でやってみました。
こういうのを表示します。
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1
コード
pascal_triangle.exs
defmodule PascalTriangle do def draw(1), do: [1] def draw(2), do: [1, 1] def draw(n) do [1] ++ (draw(n - 1) |> contract) ++ [1] end defp contract([]), do: [] defp contract([_]), do: [] defp contract([a1 | [a2 | rest]]) do [a1 + a2 | contract([a2 | rest])] end end defmodule ExString do def center(str, n) do s = String.length(str) a = div(n - s, 2) (String.duplicate(" ", a) <> str) |> String.pad_trailing(n) end end result = for i <- 1..8 do PascalTriangle.draw(i) |> Enum.join(" ") |> ExString.center(30) end Enum.join(result, "\n") |> IO.puts()