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.


open System
 
[<EntryPoint>]
let main argv = 
    // columns and rows are 0-based, so the input has to be decremented:
    let maxRow =
        match UInt32.TryParse(argv.[0]) with
        | (true, v) when v > 0u -> int (v - 1u)
        | (_, _) -> failwith "not a positive integer"
 
    let len (n: int) = int (Math.Floor(Math.Log10(float n)))
    let col0 row = row * (row + 1) / 2 + 1
    let col0maxRow = col0 maxRow
    for row in [0 .. maxRow] do
        for col in [0 .. row] do
            let value = (col0 row) + col
            let pad = String(' ', (len (col0maxRow + col) - len (value) + 1))
            printf "%s%d" pad value
        printfn ""
    0