typestar

temp_stats.dart en Dart

Una semana de temperaturas: extremos, media, barras y saltos.

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

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

void main() {
  final temps = readings.map((r) => r.$2).toList();
  final coldest = readings.reduce((a, b) => a.$2 <= b.$2 ? a : b);
  final warmest = readings.reduce((a, b) => a.$2 >= b.$2 ? a : b);

  print('Coldest: ${coldest.$1} at ${coldest.$2} C');
  print('Warmest: ${warmest.$1} at ${warmest.$2} C');
  final mean = temps.reduce((a, b) => a + b) / temps.length;
  print('Mean: ${mean.toStringAsFixed(1)} C');

  // Chart each day against the freezing line.
  for (final (day, t) in readings) {
    final bar = '#' * (t + 7).toInt().clamp(1, 20);
    final side = t > 0 ? 'above' : 'below';
    final label = t.toStringAsFixed(1).padLeft(5);
    print('${day.padRight(4)} $label $bar $side');
  }

  var sharpest = 0.0;
  for (var i = 1; i < temps.length; i++) {
    final swing = (temps[i] - temps[i - 1]).abs();
    if (swing > sharpest) sharpest = swing;
  }
  print('Sharpest overnight swing: ${sharpest.toStringAsFixed(1)} C');
}

Cómo funciona

  1. reduce encuentra los récords de frío y calor por comparación.
  2. El bucle desestructura cada record (day, t) y lo grafica.
  3. clamp mantiene las barras imprimibles; el bucle de saltos compara vecinos.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
37
Caracteres a escribir
1084
Tokens
386
Ritmo de tres estrellas
65 tpm

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

Escribe este fragmento

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

← Anterior