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.


 
!-*- mode: compilation; default-directory: "/tmp/" -*-
!Compilation started at Tue May 21 22:55:08
!
!a=./f && make $a && OMP_NUM_THREADS=2 $a 1223334444
!gfortran -std=f2008 -Wall -ffree-form -fall-intrinsics f.f08 -o f
!  1 
!  2  3 
!  4  5  6 
!  7  8  9 10 
! 11 12 13 14 15 
!
!
!  1 
!  2  3 
!  4  5  6 
!  7  8  9 10 
! 11 12 13 14 15 
! 16 17 18 19 20 21 
! 22 23 24 25 26 27 28 
! 29 30 31 32 33 34 35 36 
! 37 38 39 40 41 42 43 44  45 
! 46 47 48 49 50 51 52 53  54  55 
! 56 57 58 59 60 61 62 63  64  65  66 
! 67 68 69 70 71 72 73 74  75  76  77  78 
! 79 80 81 82 83 84 85 86  87  88  89  90  91 
! 92 93 94 95 96 97 98 99 100 101 102 103 104 105 
!
!
!
!Compilation finished at Tue May 21 22:55:08
 
 
program p
  integer, dimension(2) :: examples = [5, 14]
  integer :: i
  do i=1, size(examples)
    call floyd(examples(i))
    write(6, '(/)')
  end do
 
contains
 
  subroutine floyd(rows)
    integer, intent(in) :: rows
    integer :: n, i, j, k
    integer, dimension(60) :: L
    character(len=504) :: fmt
    n = (rows*(rows+1))/2 ! Gauss's formula
    do i=1,rows ! compute format of final row
      L(i) = 2+int(log10(real(n-rows+i)))
    end do
    k = 0
    do i=1,rows
      do j=1,i
        k = k+1
        write(fmt,'(a2,i1,a1)')'(i',L(j),')'
        write(6,fmt,advance='no') k
      enddo
      write(6,*) ''
    end do
  end subroutine floyd
 
end program p
 