Wyzwanie:
Biorąc pod uwagę macierz (lub tablicę 2d) 0 i 1 s, wypisz liczbę kroków, jakie musi upłynąć, aby gra życia Conwaya osiągnęła stan stabilny, lub -1, jeśli nigdy go nie osiągnie. Stan stabilny to stan, w którym żadne komórki nie są włączane ani wyłączane na każdym kroku. Gra musi działać w podanej matrycy, z połączoną górą i dołem oraz połączonymi bokami. (tzn. biorąc pod uwagę macierz 4x3 powinien on działać na torusie 4x3). Matryca wejściowa nie będzie większa niż 15x15.
Uwaga: Jeśli macierz zaczyna się w stanie stabilnym, wyjście powinno wynosić 0.
Próbki:
Wejście:
[[0,0,0],
[0,1,1],
[0,1,0]]
Wynik:
2)
Proces: (nie musi być wyświetlany)
[[0,0,0],
[0,1,1],
[0,1,0]]
[[1,1,1],
[1,1,1],
[1,1,1]]
[[0,0,0],
[0,0,0],
[0,0,0]]
Wejście:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
Wynik:
2)
Proces:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
[[0,0,0,0],
[0,1,0,1],
[0,0,0,0],
[0,1,0,1]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Wejście:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
Wynik:
-1
Proces:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
[[0,0,0,0],
[1,1,1,0],
[0,0,0,0],
[0,0,0,0]]
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
powtarzanie na zawsze
Wejście:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
Wynik:
4
Proces:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
[[0,0,0,0],
[1,0,0,1],
[1,1,0,1],
[0,1,1,1]]
[[0,1,0,0],
[0,1,1,1],
[0,0,0,0],
[0,1,0,1]]
[[0,1,0,1],
[1,1,1,0],
[0,1,0,1],
[1,0,1,0]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Wejście:
[[0,0,0,0],
[0,1,1,0],
[0,1,1,0],
[0,0,0,0]]
Wynik:
0
Proces:
Stan początkowy jest stabilny.
Zasady gry w życie
Jeśli komórka, która jest wyłączona (0) znajduje się obok dokładnie trzech komórek na (1), jest włączona. W przeciwnym razie jest to pominięte. Jeśli komórka, która jest włączona, znajduje się obok 2 lub 3 na kwadratach, oznacza to, że jest włączona. W przeciwnym razie zostanie wyłączone.
Odpowiedzi:
Mathematica,
130129 bajtówNie polecałbym wypróbowania więcej niż 4x4 wejść, ponieważ zajmie to wieczność (i dużo pamięci).
Wyjaśnienie
To po prostu symuluje grę w życie dla 2 N kroków, gdzie N jest liczbą komórek na wejściu. Gwarantuje to, że jeśli system ustabilizuje się, osiągniemy go. Następnie znajdujemy pierwszą parę kolejnych identycznych stanów w symulowanej historii.
Przejdźmy przez kod:
Oblicza to 2 N , ponieważ
Join@@
służy do spłaszczenia listy 2D.To symuluje grę w życie dla 2 N pokoleń. Matryca 3x3 określa sąsiedztwo totalistycznego automatu 2D i
224
jest liczbą reguł w standardowej grze w życie. Napisałem o tym, jak obliczyć tę liczbę tutaj na Mathematica.SE .Otrzymuje to wszystkie kolejne (nakładające się) pary pokoleń.
Znajduje pierwszą parę identycznych generacji, domyślnie
0
jeśli nie zostanie znaleziona żadna i ogranicza wyszukiwanie do głębokości1
. Jeśli taka para zostanie znaleziona, wynik jest jednak zwracany na liście. Więc używamy:Aby wyodrębnić pierwszy element z tej listy (
0
nie ma to wpływu na domyślną wartość bycia atomem).Na koniec odejmujemy jeden, ponieważ wyzwanie oczekuje
0
wskaźników opartych-1
na niepowodzeniach.źródło
Lua,
531509488487464424405404 bajtówKto chce masowego poddania się? \ o /
Edycja: Poprawiłem, ale nie wiem już, jak grać w golfa, więc ...
wyjaśnienia nadchodząkomentarze dodane :)Zaoszczędzono ~ 60 bajtów przy pomocy @ KennyLau
małe golfowe cięcie o jeszcze jeden bajt poprzez zmianę nazwy
a
na,Y
aby zapobiec wbudowanej konwersji szesnastkowejNie golfił
Przypadki testowe
Oto kilka przypadków testowych
źródło
Galaretka,
2625 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Większe przypadki testowe (z odpowiedzi @ Katenkyo ): stabilne 15 × 15 | Szybowiec 15 × 14
Jak to działa
źródło
Perl,
154151144140137133129 bajtówObejmuje +3 za
-ap0
Uruchom z wejściem jako wierszem grup cyfr oddzielonych spacją
Jest to potrzebne tylko w przypadku, gdy dane wejściowe są natychmiast stabilne. We wszystkich innych przypadkach możesz też wygodniej podać go jako osobne linie cyfr:
Podanie danych w ten sposób dałoby 1 zamiast 0 dla natychmiastowej stabilnej konfiguracji.
life.pl
:Prawie bije Mathematica na tym ...
Tylko w starszych wersjach perla (gdzie można użyć stałej jako zmiennej) to 126 bajtowe rozwiązanie działa:
W przypadku, gdy istnieją co najmniej 2 wiersze, to 123 bajtowe rozwiązanie działa na wszystkich wersjach perla:
źródło
rubin, 207 bajtów
Przechowuję historię każdej planszy, więc jeśli dostanę planszę, którą widziałem, zanim się zorientowałem, zdarzyła się jedna z dwóch rzeczy. po pierwsze może być tak, że znaleźliśmy stabilną pozycję, w którym to przypadku będzie najbardziej niechętny w naszej historii. drugą możliwością jest to, że mamy pętlę.
źródło
15*15*4*1000
-> 900 KB, co jest wystarczające w przypadkach, gdy potrzebujemy 10k + genów :).Julia,
9288 bajtówWeryfikacja
źródło