fork download
  1. #include <algorithm>
  2. #include <list>
  3. #include <string>
  4. #include <iostream>
  5.  
  6. std::size_t countSpaceSurroundBySpace(const std::list<std::list<char>>& l)
  7. {
  8. if (l.size() < 3u) {
  9. return 0u;
  10. }
  11. auto it1 = l.cbegin();
  12. auto it2 = std::next(it1);
  13. auto it3 = std::next(it2);
  14. std::size_t count = 0u;
  15.  
  16. for (; it3 != l.end(); ++it1, ++it2, ++it3) {
  17. std::list<char>::const_iterator its[5] = {
  18. it1->begin(),
  19. it2->begin(),
  20. it2->begin(),
  21. it2->begin(),
  22. it3->begin()
  23. };
  24. if (its[0] == it1->end()) { continue; }
  25. ++its[0];
  26. if (its[2] == it2->end()) { continue; }
  27. ++its[2];
  28. ++its[3];
  29. if (its[3] == it2->end()) { continue; }
  30. ++its[3];
  31. if (its[4] == it3->end()) { continue; }
  32. ++its[4];
  33. for (; its[0] != it1->end() && its[3] != it2->end() && its[4] != it3->end();) {
  34. if (std::all_of(std::begin(its), std::end(its), [](std::list<char>::const_iterator it) { return *it == ' '; })) {
  35. ++count;
  36. }
  37. for (auto& it : its) {
  38. ++it;
  39. }
  40. }
  41. }
  42. return count;
  43. }
  44.  
  45.  
  46. int main()
  47. {
  48. std::list<std::list<char>> l = {
  49. {' ', ' ', 'H', 'H', 'H'},
  50. {'H', 'H', ' ', ' ', 'H', 'H'},
  51. {'H', ' ', ' ', ' ', 'H', ' '},
  52. {' ', 'H', ' ', ' ', 'H'}
  53. };
  54.  
  55. std::cout << countSpaceSurroundBySpace(l) << std::endl;
  56.  
  57. return 0;
  58. }
  59.  
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
1