#include #include #include #include #include std::unordered_set determineCombinations(int codeNumber) { std::unordered_set resultSet; if (codeNumber >= 128) { resultSet.insert("XXX"); codeNumber -= 128; } if (codeNumber >= 64) { resultSet.insert("XX."); codeNumber -= 64; } if (codeNumber >= 32) { resultSet.insert("X.X"); codeNumber -= 32; } if (codeNumber >= 16) { resultSet.insert("X.."); codeNumber -= 16; } if (codeNumber >= 8) { resultSet.insert(".XX"); codeNumber -= 8; } if (codeNumber >= 4) { resultSet.insert(".X."); codeNumber -= 4; } if (codeNumber >= 2) { resultSet.insert("..X"); codeNumber -= 2; } if (codeNumber >= 1) { resultSet.insert("..."); } return resultSet; } void propagate(std::vector & propagatedVector, int codeRule, int iterNumber) { std::unordered_set stateSet = determineCombinations(codeRule); for (int i = 0; i < iterNumber; i++) { std::string newGeneration(propagatedVector[0].size(), '.'); std::string state("..."); for (int j = 1; j < newGeneration.size() - 1; j++) { state[0] = propagatedVector[i][j-1]; state[1] = propagatedVector[i][j]; state[2] = propagatedVector[i][j+1]; if (stateSet.count(state)) newGeneration[j] = 'X'; } propagatedVector.emplace_back(std::move(newGeneration)); } } int main() { std::vector result; int codeRule; int iterNumber; std::cin >> codeRule >> iterNumber; std::string input; std::cin >> input; result.emplace_back(std::string(".").append(input).append(".")); propagate(result, codeRule, iterNumber); for (int i = 1; i < result.size(); i++) { std::cout << result[i].substr(1, result[i].size() - 2) << std::endl; } return 0; }