diff --git a/docs/hackerrank/warmup/a_very_big_sum.md b/docs/hackerrank/warmup/a_very_big_sum.md new file mode 100644 index 0000000..7623241 --- /dev/null +++ b/docs/hackerrank/warmup/a_very_big_sum.md @@ -0,0 +1,55 @@ +# [A Very Big Sum](https://www.hackerrank.com/challenges/a-very-big-sum) + +Difficulty: #easy +Category: #warmup + +In this challenge, you are required to calculate and print the +sum of the elements in an array, keeping in mind that some of +those integers may be quite large. + +## Function Description + +Complete the aVeryBigSum function in the editor below. +It must return the sum of all array elements. + +aVeryBigSum has the following parameter(s): + +- int ar[n]: an array of integers. + +## Return + +- long: the sum of all array elements + +## Input Format + +The first line of the input consists of an integer n. +The next line contains space-separated integers contained in the array. + +## Output Format + +Return the integer sum of the elements in the array. + +## Constraints + +$ 1 <= n < 10 $ \ +$ 0 <= ar[i] <= 10^10 $ + +## Sample Input + +```text +5 +1000000001 1000000002 1000000003 1000000004 1000000005 +``` + +## Output + +```text +5000000015 +``` + +## Note + +The range of the 32-bit integer is +($ -2^31 $) to ($ 2^31 - 1 $) or $ [-2147483648, 2147483647] $ +When we add several integer values, the resulting sum might exceed the +above range. You might need to use long int C/C++/Java to store such sums. diff --git a/src/lib/exercises/include/exercises/hackerrank/warmup/a_very_big_sum.hpp b/src/lib/exercises/include/exercises/hackerrank/warmup/a_very_big_sum.hpp new file mode 100644 index 0000000..d518350 --- /dev/null +++ b/src/lib/exercises/include/exercises/hackerrank/warmup/a_very_big_sum.hpp @@ -0,0 +1,7 @@ +#include + +#pragma once + +namespace hackerrank::warmup { + long aVeryBigSum(const std::vector& ar); +} diff --git a/src/lib/exercises/src/hackerrank/warmup/a_very_big_sum.cpp b/src/lib/exercises/src/hackerrank/warmup/a_very_big_sum.cpp new file mode 100644 index 0000000..9b42bb1 --- /dev/null +++ b/src/lib/exercises/src/hackerrank/warmup/a_very_big_sum.cpp @@ -0,0 +1,17 @@ +#include + +/** + * @link Problem definition [[docs/hackerrank/warmup/a_very_big_sum.md]] + */ + +#include +#include + +namespace hackerrank::warmup { + + long aVeryBigSum(const std::vector& ar) { + const long INIT_VALUE = 0L; + return std::accumulate(ar.begin(), ar.end(), INIT_VALUE); + } + +} diff --git a/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.cpp b/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.cpp new file mode 100644 index 0000000..ff3cbfc --- /dev/null +++ b/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.cpp @@ -0,0 +1,26 @@ +#include + +#include +#include +#include + +#include +#include +#include +using json = nlohmann::json; + +TEST_CASE("aVeryBigSum JSON Test Cases", "[warmup]") +{ + std::filesystem::path cwd = std::filesystem::current_path(); + std::string path = cwd.string() + "/unit/lib/hackerrank/warmup/a_very_big_sum.testcases.json"; + + INFO("aVeryBigSum JSON test cases FILE: " << path); + + std::ifstream f(path); + json data = json::parse(f); + + for (auto testcase : data) { + long result = hackerrank::warmup::aVeryBigSum(testcase["input"]); + CHECK(result == testcase["expected"]); + } +} diff --git a/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.testcases.json b/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.testcases.json new file mode 100644 index 0000000..0dde275 --- /dev/null +++ b/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.testcases.json @@ -0,0 +1,6 @@ +[ + { + "input": [1000000001, 1000000002, 1000000003, 1000000004, 1000000005], + "expected": 5000000015 + } +]