Każda komórka w przypominającym życie automacie komórkowym potrzebuje tylko jednego bitu, aby ją przedstawić, ponieważ może być tylko żywa lub martwa. Oznacza to, że są tylko dwa kolory; strasznie nudne.
Normalne obrazy mają 24 bity na piksel (8 w każdym z RGB). Oznacza to, że na normalnym obrazie z pikselami jako komórkami można jednocześnie symulować 24 realistyczne gry!
Wyzwanie
Twoim zadaniem jest napisanie programu, który zastosuje jedną generację reguł realistycznego automatu komórkowego do obrazu o głębokości 24 bitów (w dowolnym dobrze znanym formacie), i wyśle wynikowy obraz.
Każda z 24 warstw będzie używać tego samego realistycznego zestawu reguł, ściśle w obrębie własnej warstwy. 24 warstwy nie wchodzą ze sobą w interakcje.
Również
- Zera to martwe komórki, a te żywe komórki.
- Warunki brzegowe są okresowe (tworząc torus).
- Wszelkie wymiary obrazu powinny działać.
Wejście wyjście
Twój program musi przyjmować 3 argumenty, poprzez stdin lub wiersz poleceń (lub najbliższy odpowiednik twojego języka):
- Nazwa wejściowego pliku obrazu.
- Ciąg cyfr od 0 do 8 w porządku rosnącym, który oznacza, kiedy rodzą się nowe komórki:
- Jeśli cyfra d jest w ciągu następnie martwe komórki ożywają, gdy mają d życia sąsiadów.
- Przykład:
3
jest normalny Życie - Martwe komórki z dokładnie 3 żywymi sąsiadami ożywają.
- Ciąg cyfr od 0 do 8 w porządku rosnącym, który oznacza, że istniejące komórki przeżyją:
- Jeśli cyfra d jest w ciągu następnie żywe komórki z d żywych sąsiadów przetrwać do następnego pokolenia, w przeciwnym razie umrą.
- Przykład:
23
jest normalny Życie - Tylko komórki z dokładnie 2 lub 3 sąsiadami przeżyją do następnej rundy.
Pamiętaj, że sąsiedztwo Moore jest zawsze używane. Przeczytaj to lub tamto, aby uzyskać więcej informacji na temat tego, co dokładnie definiuje realistyczny automat i wiele interesujących zestawów reguł.
Obraz wyjściowy 1. generacji powinien zostać wyświetlony lub zapisany jako out.png
( bmp
lub cokolwiek).
Uległość
Najkrótszy kod w bajtach wygrywa.
W przypadku niektórych nietrywialnych zestawów reguł wymagane jest dołączenie co najmniej jednego obrazu testowego i jego trzech kolejnych kolejnych generacji. Użyj swojego awatara i normalnych zasad Życia, jeśli nie możesz wymyślić nic lepszego.
Jeśli chcesz, możesz użyć tego pistoletu szybowcowego Gosper, w którym jedyne żywe kawałki znajdują się w zielonej warstwie 128 (z pewnością działa tylko w normalnym życiu):
Zachęcamy do publikowania interesujących sekwencji, a nawet animacji.
Odpowiedzi:
MATLAB: 275
Moim ulubionym parametrem
45678
,568
który wypróbowałem, jest to , że po stopniowym rozpadzie powstaje niebo migoczących gwiazd. Ten obraz przedstawia „rozpad trwałości pamięci”.Niegolfowany kod produkujący gif (akceptuje PNG bez rozszerzenia):
Kod w golfa, który akceptuje pełną nazwę pliku (może to być GIF, JPEG i być może inne rzeczy) i zapisuje w
out.png
:Poprzednio odkryto jest fakt, że parametry
12
,1
może być używany do generowania Sierpińskiego jak dywan fraktali. Oto jeden z losowo umieszczonym punktem początkowym w każdym bicie:źródło
Mathematica, 359
Pobieram dane z podpowiedzi łańcuchowych w kolejności (1) reguł urodzenia, (2) reguł przeżycia, (3) nazwy pliku i wyświetlam wynik bezpośrednio w Mathematica.
Powinno to być w stanie poradzić sobie z większością popularnych formatów, o ile plik ma głębokość 24 bitów.
Oto nieco niestosowana wersja:
Oto dwa przykłady z wykorzystaniem awatara Rainbolt :
20 pokoleń korzystających ze standardowej gry życia
[3,23]
:20 pokoleń wykorzystujących
[456,34567]
:A oto GIF z pierwszych 200 generacji tej ostatniej reguły. GIF przeskakuje co trzecią klatkę, ponieważ w przeciwnym razie nie mogłem go skompresować poniżej 2 MB:
źródło
Python 2, 427
Dla tych, którzy nie mają Mathematica;)
Monituje o nazwę pliku, następnie przypadki porodu, a następnie przypadki przeżycia. Więc dla normalnych zasad życiowych to polubisz wejściowe
test.bmp
, a następnie3
, a następnie23
(bez cudzysłowów ani niczego potrzebne).Użyłem formatowania łańcucha do indeksowania i rekombinacji bitów kolorów, chociaż obawiam się, że to prawdopodobnie nie jest optymalne.
Pamiętaj, że jest to dość powolne.
Przykład
Wysokie życie i świetne połączenie sztuki, prawda? (Reguła
36
/23
.)Oryginał / Generacja 1
Generacja 2 / Generacja 3
źródło
Java, 1085 bajtów
Przykłady (reguła 368/245):
Gen 0:
Gen 1:
Gen 2:
Gen 3:
Gen 4:
źródło