diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-03-11 23:20:09 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-11 23:20:09 +0000 |
| commit | 993b5cfec02444f8ab158507ea64f42bcd3d175b (patch) | |
| tree | 3678bcde9af7c2fb9a2fcb9f8cd5deefd17f59c2 /challenge-200/paulo-custodio/cpp/ch-1.cpp | |
| parent | 51465a4186e14e5f9ae26e7f5b20dbb9f5ea8aae (diff) | |
| parent | 0ad64a5e5a740655432a36b2af0c35760289cf89 (diff) | |
| download | perlweeklychallenge-club-993b5cfec02444f8ab158507ea64f42bcd3d175b.tar.gz perlweeklychallenge-club-993b5cfec02444f8ab158507ea64f42bcd3d175b.tar.bz2 perlweeklychallenge-club-993b5cfec02444f8ab158507ea64f42bcd3d175b.zip | |
Merge pull request #7709 from pauloscustodio/master
Add Perl, C, C++ and Forth solutions
Diffstat (limited to 'challenge-200/paulo-custodio/cpp/ch-1.cpp')
| -rw-r--r-- | challenge-200/paulo-custodio/cpp/ch-1.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/challenge-200/paulo-custodio/cpp/ch-1.cpp b/challenge-200/paulo-custodio/cpp/ch-1.cpp new file mode 100644 index 0000000000..46948327c7 --- /dev/null +++ b/challenge-200/paulo-custodio/cpp/ch-1.cpp @@ -0,0 +1,68 @@ +/* +Challenge 200 + +Task 1: Arithmetic Slices +Submitted by: Mohammad S Anwar +You are given an array of integers. + +Write a script to find out all Arithmetic Slices for the given array of integers. + +An integer array is called arithmetic if it has at least 3 elements and the +differences between any three consecutive elements are the same. + + +Example 1 +Input: @array = (1,2,3,4) +Output: (1,2,3), (2,3,4), (1,2,3,4) +Example 2 +Input: @array = (2) +Output: () as no slice found. +*/ + +#include <iostream> +#include <vector> + +bool is_arithmetic(int nums[], int nums_size) { + if (nums_size < 3) + return false; + int step = nums[1] - nums[0]; + for (int i = 2; i < nums_size; i++) { + if (nums[i] - nums[i-1] != step) + return false; + } + return true; +} + +void print_slices(std::vector<int> nums) { + const char* sep = ""; + int nums_size = static_cast<int>(nums.size()); + + std::cout << "("; + for (int i = 0; i < nums_size-2; i++) { + for (int j = i+2; j < nums_size; j++) { + if (is_arithmetic(&nums[i], j-i+1)) { + std::cout << sep; + sep = "), ("; + for (int k = i; k <= j; k++) { + std::cout << nums[k]; + if (k != j) + std::cout << ","; + } + } + } + } + std::cout << ")" << std::endl; +} + +int main(int argc, char* argv[]) { + argv++; argc--; + if (argc == 0) { + std::cerr << "usage: ch-1 nums..." << std::endl; + exit(EXIT_FAILURE); + } + + std::vector<int> nums; + for (int i = 0; i < argc; i++) + nums.push_back(atoi(argv[i])); + print_slices(nums); +} |
