word_freq.f90 en Fortran
Una tabla de frecuencia de palabras hecha de index, subcadenas y un gráfico de numerales.
! Count word frequencies in a passage and chart the leaders.
program word_freq
implicit none
character(len=*), parameter :: passage = &
"the rain in maine falls mainly on the plain and " // &
"the rain stays on the plain"
character(len=12) :: words(20), current
integer :: counts(20) = 0
integer :: used = 0
integer :: pos, next_space, i
logical :: known
! Walk the passage: cut at each space, tally every word.
pos = 1
do while (pos <= len(passage))
next_space = index(passage(pos:), " ")
if (next_space == 0) then
current = passage(pos:)
pos = len(passage) + 1
else
current = passage(pos:pos + next_space - 2)
pos = pos + next_space
end if
if (len_trim(current) == 0) cycle
known = .false.
do i = 1, used
if (words(i) == current) then
counts(i) = counts(i) + 1
known = .true.
exit
end if
end do
if (.not. known) then
used = used + 1
words(used) = current
counts(used) = 1
end if
end do
print '(i0, a)', used, " distinct words"
print '(a)', "word ct bar"
do i = 1, used
print '(a, 1x, i2, 1x, a)', words(i), counts(i), &
repeat("#", counts(i))
end do
end program word_freq
Cómo funciona
- El
do whilerecorre el pasaje, cortando una palabra en cada espacio conindex. - Una búsqueda lineal suma a las palabras conocidas o reclama la casilla libre siguiente.
repeat("#", counts(i))dibuja la barra de cada palabra en el bucle del reporte.
Palabras clave y builtins usados aquí
charactercycledoelseendexitifimplicitindexintegerlenlen_trimlogicalnonenotparameterprintprogramrepeatthenwhile
El intento, en números
- Líneas
- 47
- Caracteres a escribir
- 1084
- Tokens
- 252
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 233 segundos.
Paso 1 de 3 en Bis; paso 25 de 27 en Fundamentos del lenguaje.