typestar

grade_report.cs en C#

Un libro de calificaciones en un archivo: promedios, letras y una tabla resumen.

// grade_report: promedios por estudiante, nota con letra y resumen del curso
var scores = new Dictionary<string, int[]>
{
    ["Ada"] = new[] { 92, 88, 95 },
    ["Alan"] = new[] { 78, 85, 80 },
    ["Grace"] = new[] { 90, 91, 86 },
    ["Edsger"] = new[] { 70, 65, 74 },
};

string Letter(double avg) => avg switch
{
    >= 90 => "A", >= 80 => "B", >= 70 => "C", _ => "F",
};

var averages = scores
    .Select(pair => (Name: pair.Key, Avg: pair.Value.Average()))
    .OrderByDescending(s => s.Avg)
    .ToList();

Console.WriteLine("student    avg  grade");
foreach (var (name, avg) in averages)
{
    Console.WriteLine($"{name,-9} {avg,5:F1}  {Letter(avg)}");
}

var classAvg = averages.Average(s => s.Avg);
Console.WriteLine($"\nclass average {classAvg:F1}");
Console.WriteLine($"top student   {averages[0].Name}");

Cómo funciona

  1. Un diccionario de arreglos de puntajes es todo el modelo de datos.
  2. La función local Letter mapea promedios a través de una expresión switch.
  3. LINQ ordena a los estudiantes; los huecos de alineación formatean la tabla.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
28
Caracteres a escribir
784
Tokens
195
Ritmo de tres estrellas
95 tpm

Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 123 segundos.

Escribe este fragmento

Paso 2 de 2 en Bis; paso 29 de 29 en Fundamentos del lenguaje.

← Anterior