typestar

anagram_finder.cs en C#

Agrupa las palabras por sus letras ordenadas y los anagramas se encuentran solos.

// anagram_finder: agrupa palabras por letras ordenadas e imprime familias
var words = new[]
{
    "listen", "silent", "enlist", "google", "banana",
    "stressed", "desserts", "elbow", "below", "state", "taste",
};

var families = words
    .GroupBy(w => string.Concat(w.OrderBy(c => c)))
    .Where(g => g.Count() > 1)
    .OrderByDescending(g => g.Count())
    .ThenBy(g => g.Key)
    .ToList();

Console.WriteLine($"{words.Length} words in");
foreach (var family in families)
{
    Console.WriteLine($"  {string.Join(" = ", family)}");
}

var covered = families.Sum(f => f.Count());
Console.WriteLine($"{covered} words share their letters with another");

Cómo funciona

  1. string.Concat(w.OrderBy(c => c)) es la clave en forma canónica.
  2. Los grupos de más de uno son familias de anagramas.
  3. Ordenar por tamaño y luego por clave vuelve estable la salida.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
22
Caracteres a escribir
626
Tokens
141
Ritmo de tres estrellas
90 tpm

Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 94 segundos.

Escribe este fragmento

Paso 2 de 2 en Bis; paso 17 de 17 en LINQ a fondo.

← Anterior