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
źródło
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ściowychOdpowiedzi:
Java - 1254 bajty - bardzo słabe rozwiązanie
Przyjmuje dane z wiersza poleceń.
Co to robi
Żadnych wymyślnych sztuczek, po prostu rozwiązanie brutalnej siły. Przechodzi przez każdą możliwą początkową tablicę w rozmiarze X, Y i iteruje ją raz przez algorytm Game of Life i sprawdza ją na tablicy wejściowej. Zajmuje to BARDZO długi czas, ponieważ każda tablica o rozmiarze x przez y ma 2 ^ (x * y) możliwych kombinacji. Uruchomienie tablicy 4x5 zajęło prawie 10 minut. Głupio głupio jak na coś prostszego niż jest.
Jeśli jest możliwe, że była to rozwinięta plansza, drukuje „ewoluowała”, a jeśli nie mogła być ewoluowana, drukuje „stworzona”.
źródło