#include <iostream>
#include <vector>
#include <cstdint>
#include <string>
enum class Cell : std::uint8_t {
Die = 0,
Live = 1 ,
};
std::vector<Cell> MakeVector() {
std::vector<Cell> R;
std::string S = ".*...**.*.***..";
for (auto& o :S){
R.push_back((o == '.') ? Cell::Die:Cell::Live);
}
return R;
}
bool Show(const std::vector<Cell>& D) {
std::cout << D.size() << ':';
for (auto& o : D) {
std::cout << static_cast<char>((o == Cell::Die) ? '.' : '*');
}
std::cout << std::endl;
return true;
}
std::uint64_t MakeHoge(std::vector<Cell> D,std::size_t L) {
std::vector<Cell> T;
for (std::size_t i = 0; i < L; i++) {
for (std::int64_t j = 0; j < D.size(); j++) {
if (D[j] == Cell::Die) {
T.push_back(Cell::Die);
continue;
}
if (j == 0) {
T.push_back(static_cast<Cell>(static_cast<std::uint8_t>(D[j]) & static_cast<std::uint8_t>(D[j + 1])));
continue;
}
if (j == D.size() - 1) {
T.push_back(static_cast<Cell>(static_cast<std::uint8_t>(D[j]) & static_cast<std::uint8_t>(D[j - 1])));
continue;
}
if ((D[j - 1] != D[j + 1]) && D[j] == Cell::Live) {
T.push_back(Cell::Live);
}
else {
T.push_back(Cell::Die);
}
}
if (D == T) {
return i;
}
else {
Show(T);
D = T;
T.clear();
}
}
return L;
}
int main() {
std::vector<Cell> D = MakeVector();
Show(D);
auto R=MakeHoge(D, 100);
std::cout << "Count:" << R+1 << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0ZGludD4KI2luY2x1ZGUgPHN0cmluZz4KCmVudW0gY2xhc3MgQ2VsbCA6IHN0ZDo6dWludDhfdCB7CglEaWUgPSAwLAoJTGl2ZSA9IDEgLAp9OwoKc3RkOjp2ZWN0b3I8Q2VsbD4gTWFrZVZlY3RvcigpIHsKCXN0ZDo6dmVjdG9yPENlbGw+IFI7CglzdGQ6OnN0cmluZyBTID0gIi4qLi4uKiouKi4qKiouLiI7CgoJZm9yIChhdXRvJiBvIDpTKXsKCQlSLnB1c2hfYmFjaygobyA9PSAnLicpID8gIENlbGw6OkRpZTpDZWxsOjpMaXZlKTsKCgl9CgoJcmV0dXJuIFI7Cn0KYm9vbCBTaG93KGNvbnN0IHN0ZDo6dmVjdG9yPENlbGw+JiBEKSB7CglzdGQ6OmNvdXQgPDwgRC5zaXplKCkgPDwgJzonOwoJZm9yIChhdXRvJiBvIDogRCkgewoJCXN0ZDo6Y291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPigobyA9PSBDZWxsOjpEaWUpID8gJy4nIDogJyonKTsKCX0KCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gdHJ1ZTsKfQpzdGQ6OnVpbnQ2NF90IE1ha2VIb2dlKHN0ZDo6dmVjdG9yPENlbGw+IEQsc3RkOjpzaXplX3QgTCkgewoJc3RkOjp2ZWN0b3I8Q2VsbD4gVDsKCglmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgTDsgaSsrKSB7CgkJZm9yIChzdGQ6OmludDY0X3QgaiA9IDA7IGogPCBELnNpemUoKTsgaisrKSB7CgkJCWlmIChEW2pdID09IENlbGw6OkRpZSkgewoJCQkJVC5wdXNoX2JhY2soQ2VsbDo6RGllKTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWlmIChqID09IDApIHsKCQkJCVQucHVzaF9iYWNrKHN0YXRpY19jYXN0PENlbGw+KHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oRFtqXSkgJiBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KERbaiArIDFdKSkpOwoJCQkJY29udGludWU7CgkJCX0KCQkJaWYgKGogPT0gRC5zaXplKCkgLSAxKSB7CgkJCQlULnB1c2hfYmFjayhzdGF0aWNfY2FzdDxDZWxsPihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KERbal0pICYgc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PihEW2ogLSAxXSkpKTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWlmICgoRFtqIC0gMV0gIT0gRFtqICsgMV0pICYmIERbal0gPT0gQ2VsbDo6TGl2ZSkgewoJCQkJVC5wdXNoX2JhY2soQ2VsbDo6TGl2ZSk7CgkJCX0KCQkJZWxzZSB7CgkJCQlULnB1c2hfYmFjayhDZWxsOjpEaWUpOwoJCQl9CgkJfQoJCWlmIChEID09IFQpIHsKCQkJcmV0dXJuIGk7CgkJfQoJCWVsc2UgewoJCQlTaG93KFQpOwoJCQlEID0gVDsKCQkJVC5jbGVhcigpOwoJCX0KCgl9CglyZXR1cm4gTDsKfQoKCmludCBtYWluKCkgewoJc3RkOjp2ZWN0b3I8Q2VsbD4gRCA9IE1ha2VWZWN0b3IoKTsKCQoJU2hvdyhEKTsKCWF1dG8gUj1NYWtlSG9nZShELCAxMDApOwoJc3RkOjpjb3V0IDw8ICJDb3VudDoiIDw8IFIrMSA8PCBzdGQ6OmVuZGw7CgoJcmV0dXJuIDA7Cn0=