diff options
Diffstat (limited to 'challenge-252/witawayar/cpp')
| -rw-r--r-- | challenge-252/witawayar/cpp/ch-1.cpp | 38 | ||||
| -rw-r--r-- | challenge-252/witawayar/cpp/ch-2.cpp | 28 |
2 files changed, 66 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"; +} diff --git a/challenge-252/witawayar/cpp/ch-2.cpp b/challenge-252/witawayar/cpp/ch-2.cpp new file mode 100644 index 0000000000..91b103757b --- /dev/null +++ b/challenge-252/witawayar/cpp/ch-2.cpp @@ -0,0 +1,28 @@ +// g++ -Wall -Wextra -Wpedantic -std=c++17 cpp/ch-2.cpp +#include <iostream> // cout +#include <numeric> // accumulate +#include <sstream> // stringstream +#include <vector> + +std::vector<int> fun(int const& n) { + std::vector<int> range(n); + std::iota(range.begin(), range.end(), -(n / 2)); + return range; +} + +int main(void) { + // Tests + std::vector<unsigned> tests{5, 3, 1}; + + for (const unsigned& input : tests) { + std::vector<int> got = fun(input); + int sum = std::accumulate(got.cbegin(), got.cend(), 0); + if (sum != 0) { + std::stringstream error_msg; + error_msg << "Expected " << 0 << ", got " << sum; + throw std::runtime_error(error_msg.str()); + } + } + + std::cout << "done-testing, success\n"; +} |
