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
reduceencuentra los récords de frío y calor por comparación.- El bucle desestructura cada record
(day, t)y lo grafica. clampmantiene las barras imprimibles; el bucle de saltos compara vecinos.
Palabras clave y builtins usados aquí
constfinalforifinvarvoid
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.
Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.