typestar

grade_report.jl en Julia

Boletines desde un roster de structs, guardas de nota y vcat.

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

using Printf

struct Student
    name::String
    scores::Vector{Int}
end

roster = [
    Student("Ada", [92, 88, 97]),
    Student("Grace", [84, 91, 78]),
    Student("Alan", [70, 66, 74]),
    Student("Edsger", [58, 67, 61]),
]

average(s::Student) = sum(s.scores) / length(s.scores)

function letter(avg)
    avg >= 90 && return 'A'
    avg >= 80 && return 'B'
    avg >= 70 && return 'C'
    avg >= 60 && return 'D'
    return 'F'
end

println("student  avg grade")
for s in sort(roster, by = s -> s.name)
    @printf("%-8s %4.1f  %c\n", s.name, average(s), letter(average(s)))
end

all_scores = reduce(vcat, [s.scores for s in roster])
@printf("Class average: %.1f\n", sum(all_scores) / length(all_scores))

Cómo funciona

  1. Student guarda nombre y puntajes; average es una línea.
  2. letter retorna por una escalera de guardas &&.
  3. reduce(vcat, ...) junta cada puntaje para el promedio del curso.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
33
Caracteres a escribir
734
Tokens
213
Ritmo de tres estrellas
65 tpm

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

Escribe este fragmento

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

← Anterior Siguiente →