typestar

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

  1. counts[word, default: 0] += 1 cuenta sin guardas.
  2. El orden clasifica por conteo con empates alfabéticos en una clausura.
  3. String(repeating:count:) dibuja la barra de cada palabra.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

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

← Anterior Siguiente →