Floyd's triangle   lists the natural numbers in a right triangle aligned to the left where

 the first row is   1     (unity)
 successive rows start towards the left with the next number followed by successive naturals listing one more number than the line above.


The first few lines of a Floyd triangle looks like this:

 1
 2  3
 4  5  6
 7  8  9 10
11 12 13 14 15



Task

 Write a program to generate and display here the first   n   lines of a Floyd triangle. 
(Use   n=5   and   n=14   rows).
 Ensure that when displayed in a mono-space font, the numbers line up in vertical columns as shown and that only one space separates numbers of the last row.


defmodule Floyd do
  def triangle(n) do
    max = trunc(n * (n + 1) / 2)
    widths = for m <- (max - n + 1)..max, do: (m |> Integer.to_string |> String.length) + 1
    format = Enum.map(widths, fn wide -> "~#{wide}w" end) |> List.to_tuple
    line(n, 0, 1, format)
  end
 
  def line(n, n, _, _), do: :ok
  def line(n, i, count, format) do
    Enum.each(0..i, fn j -> :io.fwrite(elem(format,j), [count+j]) end)
    IO.puts ""
    line(n, i+1, count+i+1, format)
  end
end
 
Floyd.triangle(5)
Floyd.triangle(14)