Biorąc pod uwagę stan kwadratowej siatki Game of Life, określ, czy mogła ewoluować z dowolnego poprzedniego stanu, czy mogła zostać stworzona. Oznacza to, czy państwo jest stanem „Garden of Eden” .
Wejście
Kwadratowa siatka stanów, gdzie 1 oznacza „żywy”, a 0 oznacza „martwy”. Możesz wybrać dowolne dwa wyróżniające się symbole zamiast 0 i 1, jeśli chcesz.
Długość boku siatki nie będzie wynosić zero, ale może być dowolną liczbą naturalną 1 <= N <= 20.
Każda lub wszystkie komórki poza siatką wejściową mogą być żywe w tym pokoleniu, a niektóre lub wszystkie z nich mogły być żywe w poprzednim pokoleniu. Wszechświat, który należy wziąć pod uwagę, jest nieskończony, więc nie ma warunków brzegowych. Krawędzie wejścia nie są krawędziami wszechświata. W szczególności siatka się nie zawija.
Dane wejściowe mogą mieć postać łańcucha rozdzielanego wierszem lub pojedynczego łańcucha. Jeśli chcesz, możesz wziąć długość boku lub obszar siatki jako dodatkowe dane wejściowe (przed lub po siatce).
Dopuszczalne formaty wejściowe:
010,101,010
010101010
010
101
010
3 010101010
Wynik
„Utworzono”, jeśli nie ma możliwego stanu poprzedniego (w tym stanów większych niż siatka wejściowa), który doprowadziłby do stanu wejściowego następnej generacji.
„Rozwinięty”, jeśli istnieje co najmniej jeden możliwy poprzedni stan (w tym stany większe niż siatka wejściowa), który doprowadziłby do stanu wejściowego następnej generacji.
Możesz użyć dowolnych dwóch rozróżnialnych ciągów lub liczb zamiast „Utworzono” i „Rozwinięto”, jeśli chcesz.
Zauważ, że możliwy poprzedni stan nie musi różnić się od danych wejściowych. Jeśli stan ma się jako następna generacja, należy go uznać za rozwinięty.
Przypadki testowe
010
101
010 Evolved
0101110100
0010101001
1011100110
0101111101
1001001111
1111001001
1011111010
0110011101
1001010100
0010111010 Created
Utworzony przypadek testowy pochodzi ze strony Game of Life Achima Flammenkampa .
Uwaga
Dzięki płaskowce do pisania to wyzwanie i przyjął go z tutaj
m
-by-n
, jeśli przetestuję wszystkie możliwe2^(m*n)
stany początkowe, złożoność programu będzie duża, ale rozwiązuje problem, sprawdzając tylko, czy wynik pasuje do danych wejściowych