#include #include using namespace std; int getIntFromChar(char value) { if (value == 'X') { return 1; } return 0; } int getValue(int l, int C, int r, vector rule) { int value = 0; if (l == 1 && C == 1 && r == 1) { value = rule[0]; } if (l == 1 && C == 1 && r == 0) { value = rule[1]; } if (l == 1 && C == 0 && r == 1) { value = rule[2]; } if (l == 1 && C == 0 && r == 0) { value = rule[3]; } if (l == 0 && C == 1 && r == 1) { value = rule[4]; } if (l == 0 && C == 1 && r == 0) { value = rule[5]; } if (l == 0 && C == 0 && r == 1) { value = rule[6]; } if (l == 0 && C == 0 && r == 0) { value = rule[7]; } return value; } int main() { int rule, nmbOfGenerations; cin >> rule >> nmbOfGenerations; string currentIter; getline(cin, currentIter); getline(cin, currentIter); size_t iterationLen = currentIter.size(); string newIteration; for (int i = 0; i < iterationLen; i++) { newIteration += "."; } vector ruleBinary = vector(); while (rule > 0) { int remainder = rule % 2; ruleBinary.insert(ruleBinary.begin(), remainder); rule = rule / 2; } int sizeDiff = 8 - ruleBinary.size(); for (int i = 0; i < sizeDiff; i++) { ruleBinary.insert(ruleBinary.begin(), 0); } // // for (int i = 0; i < ruleBinary.size(); i++) { // cout << ruleBinary[i]; // } // TODO for generations for (size_t generationIndex = 0; generationIndex < nmbOfGenerations; generationIndex++) { for (size_t i = 0; i < iterationLen; i++) { int C = getIntFromChar(currentIter[i]); int left, right; if (i == 0) { left = 0; } else { left = getIntFromChar(currentIter[i - 1]); } if (i == iterationLen - 1) { right = 0; } else { right = getIntFromChar(currentIter[i + 1]); } int newValue = getValue(left, C, right, ruleBinary); // cout << newValue; if (newValue == 1) { newIteration[i] = 'X'; } else { newIteration[i] = '.'; } // cout << newIteration[i] << endl; } // cout << endl; currentIter = newIteration; cout << newIteration << endl; } return 0; }