typestar

transform y accumulate en C++

Map y luego reduce, al estilo de la biblioteca estándar: std::transform eleva, std::accumulate suma.

#include <algorithm>
#include <numeric>
#include <vector>

int sum_of_squares(const std::vector<int>& values) {
    std::vector<int> squared(values.size());
    std::transform(values.begin(), values.end(), squared.begin(),
                   [](int x) { return x * x; });
    return std::accumulate(squared.begin(), squared.end(), 0);
}

Cómo funciona

  1. squared se dimensiona por adelantado para que transform tenga dónde escribir.
  2. std::transform corre la lambda del cuadrado sobre cada elemento y llena squared en orden.
  3. std::accumulate pliega los cuadrados en un solo int, partiendo de 0.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
10
Caracteres a escribir
305
Tokens
100
Ritmo de tres estrellas
65 tpm

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

Escribe este fragmento

Paso 2 de 3 en Algoritmos; paso 14 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →