typestar

word_freq.fsx en F#

Una tabla de frecuencias con Split, countBy y un orden de dos claves.

// Count word frequencies in a passage and chart the leaders.

let passage =
    "the rain in maine falls mainly on the plain and "
    + "the rain stays on the plain"

// countBy tallies in one pass; a two-key sort ranks the result.
let ranked =
    passage.Split ' '
    |> Array.toList
    |> List.countBy id
    |> List.sortBy (fun (word, n) -> (-n, word))

printfn "%d distinct words" (List.length ranked)
printfn "word    ct bar"
for word, n in ranked do
    printfn "%-7s %2d %s" word n (String.replicate n "#")

Cómo funciona

  1. countBy id cuenta las palabras en una sola pasada.
  2. Ordenar por (-n, word) clasifica con empates alfabéticos.
  3. String.replicate n "#" dibuja cada barra.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
17
Caracteres a escribir
490
Tokens
86
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 79 segundos.

Escribe este fragmento

Paso 1 de 3 en Bis; paso 25 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →