typestar

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

  1. minByOrNull y maxByOrNull encuentran los récords de frío y calor.
  2. El bucle desestructura cada día y lo grafica contra el congelamiento.
  3. zipWithNext empareja vecinos; maxOf con abs halla el salto más brusco.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

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

← Anterior