diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-01-21 21:19:29 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-21 21:19:29 +0000 |
| commit | 6e1728468bff842c9cfe1642883cbcce9fcbb04d (patch) | |
| tree | 9c20afdde8ffbdaafc05a892af73100600d5d4db /challenge-252/witawayar/cpp/ch-1.cpp | |
| parent | d9158621438166c0d4510ffe001bb339107bd6e8 (diff) | |
| parent | c040e950295d9ef9a3a952b8319ba074a51b1513 (diff) | |
| download | perlweeklychallenge-club-6e1728468bff842c9cfe1642883cbcce9fcbb04d.tar.gz perlweeklychallenge-club-6e1728468bff842c9cfe1642883cbcce9fcbb04d.tar.bz2 perlweeklychallenge-club-6e1728468bff842c9cfe1642883cbcce9fcbb04d.zip | |
Merge pull request #9437 from mustafaaydn/challenge_252
Solutions for the 252nd challenge
Diffstat (limited to 'challenge-252/witawayar/cpp/ch-1.cpp')
| -rw-r--r-- | challenge-252/witawayar/cpp/ch-1.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/challenge-252/witawayar/cpp/ch-1.cpp b/challenge-252/witawayar/cpp/ch-1.cpp new file mode 100644 index 0000000000..2d06260474 --- /dev/null +++ b/challenge-252/witawayar/cpp/ch-1.cpp @@ -0,0 +1,38 @@ +// g++ -Wall -Wextra -Wpedantic -std=c++17 cpp/ch-1.cpp +#include <algorithm> // transform +#include <iostream> // cout +#include <numeric> // accumulate +#include <sstream> // stringstream +#include <vector> + +int fun(std::vector<int> const& ints) { + std::vector<int> out; + const std::size_t N = ints.size(); + std::vector<std::size_t> indexes(N); + std::iota(indexes.begin(), indexes.end(), 1u); + std::transform(ints.cbegin(), ints.cend(), + indexes.cbegin(), std::back_inserter(out), + [&](const int& value, const std::size_t& index) { + return N % index == 0 ? value * value : 0; }); + + return std::accumulate(out.cbegin(), out.cend(), 0); +} + +int main(void) { + // Tests + std::vector<std::pair<std::vector<int>, int>> tests = { + {{1, 2, 3, 4}, 21}, + {{2, 7, 1, 19, 18, 3}, 63}, + }; + + for (const auto& [input, expected_output] : tests) { + int got = fun(input); + if (got != expected_output) { + std::stringstream error_msg; + error_msg << "Expected " << expected_output << ", got " << got; + throw std::runtime_error(error_msg.str()); + } + } + + std::cout << "done-testing, success\n"; +} |
