typestar

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

  1. std::ranges::minmax_element halla ambos extremos en una pasada; los enlaces nombran los iteradores.
  2. std::accumulate sembrado con 0.0 suma las lecturas para una media de punto flotante.
  3. count_if con una captura [mean] reporta cuántas lecturas quedan por encima del promedio.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

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

← Anterior