#include <iostream>
#include <vector>
#include <cstdint>
#include <string>
enum class Cell : std::uint8_t {
Die = 0,
Live = 1 ,
};
std::vector<Cell> MakeVector2() {
std::vector<Cell> R;
std::string S = "*...**.*.***";// find by other person.
for (auto& o :S){
R.push_back((o == '.') ? Cell::Die:Cell::Live);
}
return R;
}
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 && D[j + 1] == Cell::Live) {
T.push_back(Cell::Live);
continue;
}
if (j == D.size() - 1 && D[j - 1] == Cell::Live ) {
T.push_back(Cell::Live);
continue;
}
if (((D[j - 1] == D[j + 1]) && (D[j-1] == Cell::Live)) &&( D[j]== Cell::Die)) {
T.push_back(Cell::Live);
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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0ZGludD4KI2luY2x1ZGUgPHN0cmluZz4KCmVudW0gY2xhc3MgQ2VsbCA6IHN0ZDo6dWludDhfdCB7CglEaWUgPSAwLAoJTGl2ZSA9IDEgLAp9OwpzdGQ6OnZlY3RvcjxDZWxsPiBNYWtlVmVjdG9yMigpIHsKCXN0ZDo6dmVjdG9yPENlbGw+IFI7CglzdGQ6OnN0cmluZyBTID0gIiouLi4qKi4qLioqKiI7Ly8gZmluZCBieSBvdGhlciBwZXJzb24uCgoJZm9yIChhdXRvJiBvIDpTKXsKCQlSLnB1c2hfYmFjaygobyA9PSAnLicpID8gIENlbGw6OkRpZTpDZWxsOjpMaXZlKTsKCgl9CgoJcmV0dXJuIFI7Cn0Kc3RkOjp2ZWN0b3I8Q2VsbD4gTWFrZVZlY3RvcigpIHsKCXN0ZDo6dmVjdG9yPENlbGw+IFI7CglzdGQ6OnN0cmluZyBTID0gIi4qLi4uKiouKi4qKiouLiI7CgoJZm9yIChhdXRvJiBvIDpTKXsKCQlSLnB1c2hfYmFjaygobyA9PSAnLicpID8gIENlbGw6OkRpZTpDZWxsOjpMaXZlKTsKCgl9CgoJcmV0dXJuIFI7Cn0KYm9vbCBTaG93KGNvbnN0IHN0ZDo6dmVjdG9yPENlbGw+JiBEKSB7CglzdGQ6OmNvdXQgPDwgRC5zaXplKCkgPDwgJzonOwoJZm9yIChhdXRvJiBvIDogRCkgewoJCXN0ZDo6Y291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPigobyA9PSBDZWxsOjpEaWUpID8gJy4nIDogJyonKTsKCX0KCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gdHJ1ZTsKfQpzdGQ6OnVpbnQ2NF90IE1ha2VIb2dlKHN0ZDo6dmVjdG9yPENlbGw+IEQsc3RkOjpzaXplX3QgTCkgewoJc3RkOjp2ZWN0b3I8Q2VsbD4gVDsKCglmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgTDsgaSsrKSB7CgkJZm9yIChzdGQ6OmludDY0X3QgaiA9IDA7IGogPCBELnNpemUoKTsgaisrKSB7CgkJCS8vaWYgKERbal0gPT0gQ2VsbDo6RGllKSB7CgkJCS8vCVQucHVzaF9iYWNrKENlbGw6OkRpZSk7CgkJCS8vCWNvbnRpbnVlOwoJCQkvL30KCQkJaWYgKGogPT0gMCAmJiBEW2ogKyAxXSA9PSBDZWxsOjpMaXZlKSB7CgkJCQlULnB1c2hfYmFjayhDZWxsOjpMaXZlKTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWlmIChqID09IEQuc2l6ZSgpIC0gMSAmJiBEW2ogLSAxXSA9PSBDZWxsOjpMaXZlICkgewoJCQkJVC5wdXNoX2JhY2soQ2VsbDo6TGl2ZSk7CgkJCQljb250aW51ZTsKCQkJfQoJCQlpZiAoKChEW2ogLSAxXSA9PSBEW2ogKyAxXSkgJiYgKERbai0xXSA9PSBDZWxsOjpMaXZlKSkgJiYoIERbal09PSBDZWxsOjpEaWUpKSB7CgkJCQlULnB1c2hfYmFjayhDZWxsOjpMaXZlKTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWlmICgoRFtqIC0gMV0gIT0gRFtqICsgMV0pIC8qICYmIERbal0gPT0gQ2VsbDo6TGl2ZSAqLyApIHsKCQkJCVQucHVzaF9iYWNrKENlbGw6OkxpdmUpOwoJCQl9CgkJCWVsc2UgewoJCQkJVC5wdXNoX2JhY2soQ2VsbDo6RGllKTsKCQkJfQoJCX0KCQlpZiAoRCA9PSBUKSB7CgkJCXJldHVybiBpOwoJCX0KCQllbHNlIHsKCQkJU2hvdyhUKTsKCQkJRCA9IFQ7CgkJCVQuY2xlYXIoKTsKCQl9CgoJfQoJcmV0dXJuIEw7Cn0KCgppbnQgbWFpbigpIHsKCXN0ZDo6dmVjdG9yPENlbGw+IEQgPSBNYWtlVmVjdG9yKCk7CgkKCVNob3coRCk7CglhdXRvIFI9TWFrZUhvZ2UoRCwgMTAwKTsKCXN0ZDo6Y291dCA8PCAiQ291bnQ6IiA8PCBSKzEgPDwgc3RkOjplbmRsOwoKCXJldHVybiAwOwp9