Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <utility>
- #include <string>
- int main()
- {
- std::map<std::pair<char, char>, std::tuple<char, char, short int>> rules
- {
- {std::pair{'S', '0'}, std::tuple{'S', '0', 1}},
- {std::pair{'S', '1'}, std::tuple{'A', '1', 1}},
- {std::pair{'S', '#'}, std::tuple{'S', '#', 1}},
- {std::pair{'A', '0'}, std::tuple{'A', '0', 1}},
- {std::pair{'A', '1'}, std::tuple{'S', '1', 1}},
- {std::pair{'A', '#'}, std::tuple{'B', '#', -1}},
- {std::pair{'B', '0'}, std::tuple{'B', '0', -1}},
- {std::pair{'B', '1'}, std::tuple{'B', '1', -1}},
- {std::pair{'B', '#'}, std::tuple{'C', '#', 1}},
- {std::pair{'C', '0'}, std::tuple{'C', '0', 1}},
- {std::pair{'C', '1'}, std::tuple{'D', '0', 0}},
- {std::pair{'D', '0'}, std::tuple{'D', '0', 0}},
- };
- std::string s;
- while (std::cin >> s) {
- char state = 'S';
- long long int pos = 0;
- while (pos >= 0 && size_t(pos) < s.size()) {
- std::tuple tmp = rules[{state, s[pos]}];
- if (s[pos] == std::get<1>(tmp) && std::get<2>(tmp) == 0 && state == std::get<0>(tmp)) {
- break;
- }
- s[pos] = std::get<1>(tmp);
- pos += std::get<2>(tmp);
- state = std::get<0>(tmp);
- }
- std::cout << s << std::endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment