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
splitrecorre el pasaje;counts[word] = (counts[word] ?: 0) + 1cuenta.compareByDescendingy luegothenByordenan por conteo con empates alfabéticos."#".repeat(n)dibuja la barra de cada palabra en la tabla final.
Palabras clave y builtins usados aquí
IntStringforfuninitval
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.
Paso 1 de 3 en Bis; paso 25 de 27 en Fundamentos del lenguaje.