Żywotny automat komórkowy jest automatem komórkowym podobnym do Conway's Game of Life, ponieważ działa na (teoretycznie) nieskończenie dużej kwadratowej siatce, gdzie każda komórka ma dokładnie 8 sąsiadów i jest jednym z 2 stanów, mianowicie żywym i martwym .
Jednak te podobne do wersji wersje różnią się w kluczowy sposób: zasady, aby dana komórka ożyła i zasady, aby dana komórka przetrwała do następnej generacji.
Na przykład klasyczna gra w życie stosuje regułę B3/S23
, co oznacza, że 3 żywe komórki rodzą nową, a 2 lub 3 żyjących sąsiadów, aby przeżyć. W przypadku tego wyzwania założymy, że sąsiedzi się nie uwzględniają, więc każda komórka ma dokładnie 8 sąsiadów.
Twoim zadaniem jest, biorąc pod uwagę konfigurację początkową, regułę urodzenia, regułę przeżycia i dodatnią liczbę całkowitą (liczbę pokoleń do uruchomienia), przeprowadzić symulację automatu podobnego do Życia, stosując te reguły dla liczby pokoleń podanych w możliwie najkrótszym kodzie . Konfiguracja początkowa będzie macierzą kwadratową / tablicą 2-wymiarową lub łańcuchem wielowierszowym, do wyboru. Pozostałe mogą być podane w dowolnym rozsądnym formacie i metodzie.
Na przykład, jeśli reguła narodzin była 12345678
(dowolni żyjący sąsiedzi), reguła przetrwania była, 2357
a konfiguracja początkowa była
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
będą następne dwa pokolenia
Generation 1: Generation 2:
0 0 0 0 0 1 1 1 1 1
0 1 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 1
0 1 1 1 0 1 1 0 1 1
0 0 0 0 0 1 1 1 1 1
Gdyby liczba podanych pokoleń wynosiła 10, wynikiem byłoby coś podobnego do
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0
Nie musisz obsługiwać zmian, które zachodzą poza granicami podanymi przez macierz wejściową, jednak wszystkie komórki poza macierzą zaczynają działać martwe. Dlatego macierz wejściowa może mieć dowolny rozmiar, do maksymalnej wartości obsługiwanej przez Twój język. Nie musisz generować tablicy między pokoleniami.
To jest golf golfowy, więc wygrywa najkrótszy kod.
Przypadki testowe
Wykorzystują one B/S
zapis do wskazania zastosowanych reguł
B2/S2
, generations = 100
konfiguracja:
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
Wynik:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B1357/S2468
, generations = 12
konfiguracja:
1 0 1 0 1 0
0 1 1 0 1 0
1 0 0 0 0 0
0 0 0 0 0 1
1 1 1 1 1 0
0 1 1 0 0 1
Wynik:
0 1 0 0 0 0
0 1 1 1 1 0
0 1 0 1 1 0
1 1 1 0 0 0
0 0 1 1 1 0
0 1 1 0 0 0
Jeśli chcesz wygenerować więcej przypadków testowych, możesz użyć tego wspaniałego symulatora. Pamiętaj, aby ograniczyć rozmiar planszy
źródło
Odpowiedzi:
MATL ,
2423 bajtyDane wejściowe to:
;
jako separator wierszy.Wypróbuj online! Lub zobacz przypadki testowe: 1 , 2 .
Jeszcze przez kilka bajtów widać ewolucję w sztuce ASCII .
Wyjaśnienie
źródło
xx
Na początku wydaje się nieco rozrzutny do mnie ...Wolfram Language (Mathematica) ,
144122 bajtówWypróbuj online!
Przykładowe użycie:
używa losowej siatki 10x10 na początek, przeżywa z 2 lub 3 sąsiadami, rodzi się z 3 sąsiadami, wyniki fabuły przy 5 iteracjach.
źródło
R , 256 bajtów
Wypróbuj online!
Niestety nie wygląda to tak golfowo, jak się spodziewałem.
Dane wejściowe : macierz R i parametry wyzwania. Wyjście : macierz po generacjach R.
Algorytm wypełnia macierz zerami, aby obsłużyć granice. Następnie, iteracyjnie: 1) stosuje regułę narodzin i 2) zabija istniejące wcześniej komórki, które nie przeszły reguły przetrwania. Padding jest usuwany podczas powrotu.
źródło
216
co najmniej sześcian ...Python 2 ,
156149146 bajtówWypróbuj online!
Pobiera dane wejściowe:
R
ules:[birth,survial]
rządzi jako listastring
. np. (['135','246']
)g
eneracje:int
c
konfiguracja: kwadratowa tablica 2D1/0
lubTrue/False
Zwraca tablicę 2d z
True/False
źródło