vlad7576

up07-4 (MT)

May 17th, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <utility>
  4. #include <string>
  5.  
  6. int main()
  7. {
  8.     std::map<std::pair<char, char>, std::tuple<char, char, short int>> rules
  9.             {
  10.                     {std::pair{'S', '0'}, std::tuple{'S', '0', 1}},
  11.                     {std::pair{'S', '1'}, std::tuple{'A', '1', 1}},
  12.                     {std::pair{'S', '#'}, std::tuple{'S', '#', 1}},
  13.                     {std::pair{'A', '0'}, std::tuple{'A', '0', 1}},
  14.                     {std::pair{'A', '1'}, std::tuple{'S', '1', 1}},
  15.                     {std::pair{'A', '#'}, std::tuple{'B', '#', -1}},
  16.                     {std::pair{'B', '0'}, std::tuple{'B', '0', -1}},
  17.                     {std::pair{'B', '1'}, std::tuple{'B', '1', -1}},
  18.                     {std::pair{'B', '#'}, std::tuple{'C', '#', 1}},
  19.                     {std::pair{'C', '0'}, std::tuple{'C', '0', 1}},
  20.                     {std::pair{'C', '1'}, std::tuple{'D', '0', 0}},
  21.                     {std::pair{'D', '0'}, std::tuple{'D', '0', 0}},
  22.             };
  23.     std::string s;
  24.     while (std::cin >> s) {
  25.         char state = 'S';
  26.         long long int pos = 0;
  27.         while (pos >= 0 && size_t(pos) < s.size()) {
  28.             std::tuple tmp = rules[{state, s[pos]}];
  29.             if (s[pos] == std::get<1>(tmp) && std::get<2>(tmp) == 0 && state == std::get<0>(tmp)) {
  30.                 break;
  31.             }
  32.             s[pos] = std::get<1>(tmp);
  33.             pos += std::get<2>(tmp);
  34.             state = std::get<0>(tmp);
  35.         }
  36.         std::cout << s << std::endl;
  37.     }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment