temp_stats.cpp en C++
Mínimo, máximo y media sobre una docena de lecturas embebidas, cortesía de std::ranges.
#include <algorithm>
#include <format>
#include <iostream>
#include <numeric>
#include <vector>
// temp_stats: min, max, and mean over a week of readings
int main() {
const std::vector<double> temps = {
61.2, 64.8, 70.1, 73.4, 71.9, 66.5, 62.3,
59.8, 63.1, 68.7, 72.2, 69.4,
};
auto [low, high] = std::ranges::minmax_element(temps);
double mean = std::accumulate(temps.begin(), temps.end(), 0.0)
/ temps.size();
auto above = std::ranges::count_if(
temps, [mean](double t) { return t > mean; });
std::cout << std::format("readings: {}\n", temps.size());
std::cout << std::format("min: {:5.1f} F\n", *low);
std::cout << std::format("max: {:5.1f} F\n", *high);
std::cout << std::format("mean: {:5.1f} F\n", mean);
std::cout << std::format("above the mean: {} of {}\n",
above, temps.size());
}
Cómo funciona
std::ranges::minmax_elementhalla ambos extremos en una pasada; los enlaces nombran los iteradores.std::accumulatesembrado con0.0suma las lecturas para una media de punto flotante.count_ifcon una captura[mean]reporta cuántas lecturas quedan por encima del promedio.
Palabras clave y builtins usados aquí
autoconstdoubleintreturn
El intento, en números
- Líneas
- 27
- Caracteres a escribir
- 795
- Tokens
- 242
- Ritmo de tres estrellas
- 85 tpm
Al ritmo de tres estrellas de 85 tokens por minuto, este intento toma unos 171 segundos.
Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.