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.


# procedure to print a Floyd's Triangle with n lines                      #
PROC floyds triangle = ( INT n )VOID:
BEGIN
 
    # calculate the number of the highest number that will be printed     #
    # ( the sum of the integers 1, 2, ... n )                             #
    INT max number = ( n * ( n + 1 ) ) OVER 2;
 
    # determine the widths required to print the numbers of the final row #
    [ n ]INT widths;
    INT number := max number + 1;
    FOR col FROM n BY -1 TO 1 DO
        widths[ col ] := - ( UPB whole( number -:= 1, 0 ) + 1 )
    OD;
 
    # print the triangle                                                  #
    INT element := 0;
    FOR row TO n DO
        FOR col TO row DO
            print( ( whole( element +:= 1, widths[ col ] ) ) )
        OD;
        print( ( newline ) )
    OD
 
END; # floyds triangle #
 
main: (
 
    floyds triangle(  5 );
    print( ( newline ) );
    floyds triangle( 14 )
 
)