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
Studentguarda nombre y puntajes;averagees una línea.letterretorna por una escalera de guardas&&.reduce(vcat, ...)junta cada puntaje para el promedio del curso.
Palabras clave y builtins usados aquí
IntStringStudentVectorendforfunctioninreturnstructusing
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.
Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.