92 lines
3.5 KiB
Fortran
92 lines
3.5 KiB
Fortran
!-*- mode: compilation; default-directory: "/tmp/" -*-
|
|
!Compilation started at Fri Jun 6 15:40:18
|
|
!
|
|
!a=./f && make -k $a && echo 0 25 | $a && echo 250 265 | $a && echo 1000 1025 | $a
|
|
!gfortran -std=f2008 -Wall -fopenmp -ffree-form -fall-intrinsics -fimplicit-none -g f.f08 -o f
|
|
! 0'th 1'st 2'nd
|
|
! 3'rd 4'th 5'th
|
|
! 6'th 7'th 8'th
|
|
! 9'th 10'th 11'th
|
|
! 12'th 13'th 14'th
|
|
! 15'th 16'th 17'th
|
|
! 18'th 19'th 20'th
|
|
! 21'st 22'nd 23'rd
|
|
! 24'th 25'th
|
|
! 250'th 251'st
|
|
! 252'nd 253'rd 254'th
|
|
! 255'th 256'th 257'th
|
|
! 258'th 259'th 260'th
|
|
! 261'st 262'nd 263'rd
|
|
! 264'th 265'th
|
|
! 1000th 1001st
|
|
! 1002nd 1003rd 1004th
|
|
! 1005th 1006th 1007th
|
|
! 1008th 1009th 1010th
|
|
! 1011th 1012th 1013th
|
|
! 1014th 1015th 1016th
|
|
! 1017th 1018th 1019th
|
|
! 1020th 1021st 1022nd
|
|
! 1023rd 1024th 1025th
|
|
!
|
|
!Compilation finished at Fri Jun 6 15:40:18
|
|
|
|
program nth
|
|
implicit none
|
|
logical :: need
|
|
integer :: here, there, n, i, iostat
|
|
read(5,*,iostat=iostat) here, there
|
|
if (iostat .ne. 0) then
|
|
write(6,*)'such bad input never before seen.'
|
|
write(6,*)'I AYE EYE QUIT!'
|
|
call exit(1)
|
|
end if
|
|
need = .false.
|
|
n = abs(there - here) + 1
|
|
i = 0
|
|
do while (0 /= mod(3+mod(here-i, 3), 3))
|
|
write(6,'(a22)',advance='no') ''
|
|
i = i+1
|
|
end do
|
|
do i = here, there, sign(1, there-here)
|
|
write(6,'(a22)',advance='no') ordinate(i)
|
|
if (2 /= mod(i,3)) then
|
|
need = .true.
|
|
else
|
|
write(6,'(a)')''
|
|
need = .false.
|
|
end if
|
|
end do
|
|
if (need) write(6,'(a)')''
|
|
|
|
contains
|
|
|
|
character(len=22) function ordinate(n)
|
|
character(len=19) :: a
|
|
character(len=20), parameter :: &
|
|
&a09 = "thstndrdthththththth",&
|
|
&ateen = "thththththththththth"
|
|
integer :: ones, tens, ones_index
|
|
integer, intent(in) :: n
|
|
write(a,'(i19)') n
|
|
ones = mod(n,10)
|
|
tens = mod(n,100)
|
|
ones_index = ones*2+1
|
|
if (n < 1000) then
|
|
if ((10 .le. tens) .and. (tens .lt. 20)) then
|
|
ordinate = a // "'" // ateen(ones_index:ones_index+1)
|
|
! ^^^^^^ remove these characters to remove the important '
|
|
else
|
|
ordinate = a // "'" // a09(ones_index:ones_index+1)
|
|
! ^^^^^^ remove these characters to remove the important '
|
|
end if
|
|
else
|
|
if ((10 .le. tens) .and. (tens .lt. 20)) then
|
|
ordinate = a // ateen(ones_index:ones_index+1)
|
|
else
|
|
ordinate = a // a09(ones_index:ones_index+1)
|
|
end if
|
|
end if
|
|
end function ordinate
|
|
|
|
end program nth
|