typestar

temp_stats.jl en Julia

Una semana de temperaturas: argmin/argmax, barras y diff.

# Summarize a week of temperature readings: extremes, mean, swings.

using Printf

readings = [
    ("Mon", -4.0), ("Tue", -1.5), ("Wed", 2.0), ("Thu", 3.5),
    ("Fri", 1.0), ("Sat", -2.5), ("Sun", -6.0),
]

temps = last.(readings)
coldest = argmin(temps)
warmest = argmax(temps)

println("Coldest: $(readings[coldest][1]) at $(temps[coldest]) C")
println("Warmest: $(readings[warmest][1]) at $(temps[warmest]) C")
@printf("Mean: %.1f C\n", sum(temps) / length(temps))

# Chart each day against the freezing line.
for (day, t) in readings
    bar = "#"^max(1, Int(floor(t + 7)))
    side = t > 0 ? "above" : "below"
    @printf("%-4s %5.1f %s %s\n", day, t, bar, side)
end

# diff gives neighbor-to-neighbor changes in one call.
swings = abs.(diff(temps))
@printf("Sharpest overnight swing: %.1f C\n", maximum(swings))

Cómo funciona

  1. argmin y argmax encuentran los días récord por índice.
  2. El bucle grafica cada día contra el congelamiento con "#"^n.
  3. abs.(diff(temps)) da los saltos nocturnos en una expresión.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
27
Caracteres a escribir
799
Tokens
241
Ritmo de tres estrellas
65 tpm

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

Escribe este fragmento

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

← Anterior