typestar

word_freq.kt en Kotlin

Una tabla de frecuencia de palabras con split, un map de conteo y orden doble.

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

val PASSAGE = "the rain in maine falls mainly on the plain and " +
    "the rain stays on the plain"

fun main() {
    // Tally every word into a mutable map, missing keys start at zero.
    val counts = mutableMapOf<String, Int>()
    for (word in PASSAGE.split(" ")) {
        counts[word] = (counts[word] ?: 0) + 1
    }

    // Rank the entries, biggest first, ties broken by the word itself.
    val ranked = counts.entries.sortedWith(
        compareByDescending<Map.Entry<String, Int>> { it.value }
            .thenBy { it.key })

    println("${ranked.size} distinct words")
    println("word    ct bar")
    for ((word, n) in ranked) {
        println("%-7s %2d %s".format(word, n, "#".repeat(n)))
    }
}

Cómo funciona

  1. split recorre el pasaje; counts[word] = (counts[word] ?: 0) + 1 cuenta.
  2. compareByDescending y luego thenBy ordenan por conteo con empates alfabéticos.
  3. "#".repeat(n) dibuja la barra de cada palabra en la tabla final.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
23
Caracteres a escribir
698
Tokens
143
Ritmo de tres estrellas
65 tpm

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

Escribe este fragmento

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

← Anterior Siguiente →