fork download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5.  
  6. struct invalid_char { char c; };
  7. template <typename It>
  8. std::vector<int> split_values(It beg, It end) {
  9. std::vector<int> ret;
  10. std::transform(beg, end, std::back_inserter(ret), [](char c) {
  11. if (c >= 'a' && c <= 'z') return c - 'a' + 1;
  12. if (c >= 'A' && c <= 'Z') return c - 'A' + 1;
  13. throw invalid_char{c};
  14. });
  15. std::partial_sum(ret.begin(), ret.end(), ret.begin());
  16. std::partial_sum(ret.begin(), ret.end(), ret.begin());
  17. return ret;
  18. }
  19.  
  20. int main() {
  21. std::string s;
  22. while (std::cin >> s) {
  23. if (s.length() <= 3) {
  24. std::cout << s << " does not balance.\n";
  25. continue;
  26. }
  27. auto forward = split_values(s.begin(), s.end());
  28. auto back = split_values(s.rbegin(), s.rend());
  29. auto f = forward.begin(), fend = forward.end() - 2;
  30. for (auto b = back.rbegin() + 2; f != fend && *f != *b; ++f, ++b);
  31. if (f != fend) {
  32. auto len = std::distance(forward.begin(), f) + 1;
  33. std::cout << s.substr(0, len) << ' ' << s[len] << ' ' << s.substr(len+1)
  34. << " - " << *f << '\n';
  35. } else {
  36. std::cout << s << " does not balance.\n";
  37. }
  38. }
  39. return 0;
  40. }
Success #stdin #stdout 0s 3280KB
stdin
CONSUBSTANTIATION
WRONGHEADED
UNINTELLIGIBILITY
SUPERGLUE
stdout
CONSUBST A NTIATION - 456
WRO N GHEADED - 120
UNINTELL I GIBILITY - 521
SUPERGLUE does not balance.