temp_stats.kt en Kotlin
Una semana de temperaturas: extremos, media, gráfico de barras y saltos.
// Summarize a week of temperature readings: extremes, mean, swings.
import kotlin.math.abs
val READINGS = listOf(
"Mon" to -4.0, "Tue" to -1.5, "Wed" to 2.0, "Thu" to 3.5,
"Fri" to 1.0, "Sat" to -2.5, "Sun" to -6.0,
)
fun main() {
val temps = READINGS.map { it.second }
val coldest = READINGS.minByOrNull { it.second }!!
val warmest = READINGS.maxByOrNull { it.second }!!
println("Coldest: ${coldest.first} at ${coldest.second} C")
println("Warmest: ${warmest.first} at ${warmest.second} C")
println("Mean: %.1f C".format(temps.average()))
// Chart each day against the freezing line.
for ((day, t) in READINGS) {
val bar = "#".repeat((t + 7).toInt().coerceAtLeast(1))
val side = if (t > 0) "above" else "below"
println("%-4s %5.1f %s %s".format(day, t, bar, side))
}
val swings = temps.zipWithNext { a, b -> b - a }
println("Sharpest overnight swing: %.1f C".format(
swings.maxOf { abs(it) }))
}
Cómo funciona
minByOrNullymaxByOrNullencuentran los récords de frío y calor.- El bucle desestructura cada día y lo grafica contra el congelamiento.
zipWithNextempareja vecinos;maxOfconabshalla el salto más brusco.
Palabras clave y builtins usados aquí
elseforfunifimportinitval
El intento, en números
- Líneas
- 29
- Caracteres a escribir
- 903
- Tokens
- 252
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 233 segundos.
Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.