temp_stats.odin en Odin
Una semana de máximas diarias reducida a mínima, máxima y media, con una barra por día.
// One week of daily highs: spread, mean, and a scaled bar chart.
package main
import "core:fmt"
days := [7]string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}
temps := [7]int{61, 68, 74, 79, 72, 65, 58}
main :: proc() {
lo, hi, sum := temps[0], temps[0], 0
for t in temps {
lo = min(lo, t)
hi = max(hi, t)
sum += t
}
mean := f32(sum) / len(temps)
span := max(hi - lo, 1)
fmt.println("day temp range diff")
fmt.println("------------------------------------")
// Bars scale to the week's spread; the +1 keeps Sunday visible.
bars := "#####################"
warm_days := 0
for t, i in temps {
width := 20 * (t - lo) / span + 1
diff := f32(t) - mean
if diff > 0 do warm_days += 1
sign := "+" if diff >= 0 else ""
fmt.printfln("%s %d %-21s %s%.1f", days[i], t, bars[:width],
sign, diff)
}
fmt.println("------------------------------------")
fmt.printfln("low %d, high %d, mean %.1f", lo, hi, mean)
fmt.println("days above the mean:", warm_days)
}
Cómo funciona
- Una pasada rastrea el día más fresco y el más cálido con los builtin
minymax. - Las barras escalan a la amplitud rebanando una cadena de numerales.
- El ternario
"+" if diff >= 0 else ""elige el signo a mano.
Palabras clave y builtins usados aquí
doelsef32forifimportinintlenmaxminpackageprocstring
El intento, en números
- Líneas
- 35
- Caracteres a escribir
- 968
- Tokens
- 273
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 252 segundos.
Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.