fork(1) download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4.  
  5. struct Range {
  6. int start;
  7. int end;
  8. };
  9.  
  10. const bool bools[] = {true, false, false, false, true, true, false};
  11. const int n = 7;
  12.  
  13. bool get_bool() {
  14. static int index = 0;
  15. return bools[index++];
  16. }
  17.  
  18. int main() {
  19. std::vector<Range> result;
  20. if (n > 0) {
  21. result.reserve(n);
  22. Range range{0,0};
  23.  
  24. using vec = std::vector<Range>;
  25. using func = void(*)(vec&, Range&, int);
  26. func actions[2] = {
  27. +[](vec&, Range &r, int) {},
  28. +[](vec &v, Range &r, int curr) {
  29. r.end = curr - 1;
  30. v.push_back(r);
  31. r.start = curr;
  32. }
  33. };
  34.  
  35. bool curr = get_bool(); // get 1st value
  36. for (int i = 1; i < n; ++i) {
  37. bool val = get_bool(); // get next value
  38. actions[val != curr](result, range, i);
  39. curr = val;
  40. }
  41. range.end = n - 1;
  42. result.push_back(range);
  43. }
  44.  
  45. std::cout << std::boolalpha;
  46. std::cout << '{' << bools[0];
  47. for(int i = 1; i < n; ++i) {
  48. std::cout << ',' << bools[i];
  49. }
  50. std::cout << "}\n";
  51.  
  52. for(const auto &range : result) {
  53. std::cout << range.start << '-' << range.end << '\n';
  54. }
  55.  
  56. return 0;
  57. }
Success #stdin #stdout 0.01s 5476KB
stdin
Standard input is empty
stdout
{true,false,false,false,true,true,false}
0-0
1-3
4-5
6-6