typestar

grade_report.kt en Kotlin

Boletines desde un roster de data classes, una escalera when y format.

// Average each student's scores and print a letter-grade report card.

data class Student(val name: String, val scores: List<Int>)

val ROSTER = listOf(
    Student("Ada", listOf(92, 88, 97)),
    Student("Grace", listOf(84, 91, 78)),
    Student("Alan", listOf(70, 66, 74)),
    Student("Edsger", listOf(58, 67, 61)),
)

fun letter(avg: Double): Char = when {
    avg >= 90 -> 'A'
    avg >= 80 -> 'B'
    avg >= 70 -> 'C'
    avg >= 60 -> 'D'
    else -> 'F'
}

fun main() {
    println("student  avg grade")
    for (s in ROSTER.sortedBy { it.name }) {
        val avg = s.scores.average()
        println("%-8s %4.1f  %c".format(s.name, avg, letter(avg)))
    }
    val classAvg = ROSTER.flatMap { it.scores }.average()
    println("Class average: %.1f".format(classAvg))
}

Cómo funciona

  1. Student es una data class; ROSTER guarda cuatro.
  2. letter mapea un promedio a una calificación con un when sin sujeto.
  3. flatMap junta cada puntaje para el promedio del curso al final.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
28
Caracteres a escribir
706
Tokens
232
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 214 segundos.

Escribe este fragmento

Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →