grade_report.odin en Odin
Los puntajes de quiz se pliegan en promedios y calificaciones, y luego en un reporte.
// Average quiz scores into letter grades and print the class report.
package main
import "core:fmt"
Student :: struct {
name: string,
quizzes: [3]int,
}
roster := [4]Student{
{"Imani", {92, 88, 95}},
{"Theo", {78, 83, 80}},
{"Sofia", {85, 91, 89}},
{"Miles", {62, 70, 68}},
}
average :: proc(quizzes: [3]int) -> f32 {
sum := 0
for q in quizzes do sum += q
return f32(sum) / 3.0
}
letter :: proc(avg: f32) -> string {
switch {
case avg >= 90.0: return "A"
case avg >= 80.0: return "B"
case avg >= 70.0: return "C"
}
return "retake"
}
main :: proc() {
fmt.println("student avg grade")
fmt.println("---------------------")
class_sum: f32 = 0
for s in roster {
avg := average(s.quizzes)
class_sum += avg
fmt.printfln("%-8s %5.1f %s", s.name, avg, letter(avg))
}
fmt.println("---------------------")
fmt.printfln("class avg %.1f", class_sum / len(roster))
fmt.println("quizzes graded:", len(roster) * 3)
}
Cómo funciona
- La lista es un arreglo de structs armado con literales posicionales.
averagesuma un[3]intyf32(sum)vuelve honesta la división.%-8sy%5.1facolchan las columnas; un switch pelado mapea las bandas.
Palabras clave y builtins usados aquí
casedof32forimportinintlenpackageprocreturnstringstructswitch
El intento, en números
- Líneas
- 47
- Caracteres a escribir
- 917
- Tokens
- 271
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 250 segundos.
Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.