word_freq.swift en Swift
Una tabla de frecuencias con split, subíndice con default y un orden.
// Count word frequencies in a passage and chart the leaders.
import Foundation
let passage = "the rain in maine falls mainly on the plain and "
+ "the rain stays on the plain"
// Tally every word; default: reads a zero for new keys.
var counts: [String: Int] = [:]
for word in passage.split(separator: " ") {
counts[String(word), default: 0] += 1
}
// Rank the entries, biggest first, ties broken by the word itself.
let ranked = counts.sorted {
$0.value != $1.value ? $0.value > $1.value : $0.key < $1.key
}
print("\(ranked.count) distinct words")
print("word ct bar")
for (word, n) in ranked {
let padded = word.padding(toLength: 7, withPad: " ", startingAt: 0)
let count = String(n).count == 1 ? " \(n)" : "\(n)"
let bar = String(repeating: "#", count: n)
print("\(padded) \(count) \(bar)")
}
Cómo funciona
counts[word, default: 0] += 1cuenta sin guardas.- El orden clasifica por conteo con empates alfabéticos en una clausura.
String(repeating:count:)dibuja la barra de cada palabra.
Palabras clave y builtins usados aquí
IntStringcountdefaultforimportinletprintsortedsplitvar
El intento, en números
- Líneas
- 26
- Caracteres a escribir
- 804
- Tokens
- 188
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 174 segundos.
Paso 1 de 3 en Bis; paso 25 de 27 en Fundamentos del lenguaje.