defmodule Diamond do def build(n) do half = Enum.map(1..n, &build_line(&1, n)) [_ | t] = Enum.reverse(half) half ++ t end defp build_line(i, n) do spaces(n - i) <> middle(i) <> spaces(n - i) end defp middle(1), do: letter(0) defp middle(n) do char = letter(n - 1) char <> spaces(2 * n - 3) <> char end defp letter(n), do: <> defp spaces(n), do: String.duplicate(" ", n) end