word_freq.cs en C#
El CLI de conteo de palabras en C#: un archivo en stream, un diccionario de conteos, un top diez.
// word_freq: cuenta palabras de un archivo e imprime las diez más comunes
if (args.Length != 1)
{
Console.Error.WriteLine("usage: word_freq <file>");
Environment.Exit(1);
}
var separators = new[] { ' ', '\t', '.', ',', ';', ':', '!', '?', '"' };
var counts = new Dictionary<string, int>();
foreach (var line in File.ReadLines(args[0]))
{
var words = line.ToLower()
.Split(separators, StringSplitOptions.RemoveEmptyEntries);
foreach (var word in words)
{
counts[word] = counts.GetValueOrDefault(word) + 1;
}
}
var report = counts.OrderByDescending(pair => pair.Value)
.ThenBy(pair => pair.Key)
.Take(10);
Console.WriteLine($"{counts.Count} distinct words");
foreach (var (word, count) in report)
{
Console.WriteLine($"{count,5} {word}");
}
Cómo funciona
argstrae la línea de comandos; el mal uso sale con código 1.File.ReadLineslee en stream;GetValueOrDefaultdeja el conteo en una línea.OrderByDescending(...).ThenBy(...).Take(10)da forma al reporte.
Palabras clave y builtins usados aquí
foreachifinintnewstringvar
El intento, en números
- Líneas
- 29
- Caracteres a escribir
- 744
- Tokens
- 179
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 113 segundos.
Paso 1 de 2 en Bis; paso 28 de 29 en Fundamentos del lenguaje.