Jako dane wejściowe zostanie wyświetlony obraz w skali szarości. Twoim zadaniem jest znalezienie statycznego lub zapętlonego wzoru w grze życia Conwaya który najbardziej przypomina obraz wejściowy.
Twój wynik może być albo obrazu nieruchomego lub zapętlenie animacji w pewnym formacie, który może być przekształcony do GIF. Wymiary obrazu wyjściowego powinny być takie same jak dane wejściowe i mogą zawierać tylko czarno-białe piksele.
Jeśli wyjściem jest animacja, każda klatka musi zostać wygenerowana z poprzedniej zgodnie z zasadami Game of Life, z jedną komórką na piksel. Animacja musi być zapętlona, przy czym pierwsza klatka jest generowana z ostatniej klatki według tych samych reguł.
Jeśli wydruk jest nieruchomym obrazem, zastosowanie do niego reguł gry musi dać ten sam obraz. Oznacza to, że żadna „żywa” komórka nie może mieć więcej niż trzech lub mniej niż dwóch „żywych” sąsiadów, a żadna „martwa” komórka nie może mieć dokładnie trzech „żywych” sąsiadów. (Pamiętaj, że jest to w zasadzie taka sama animacja jak opisano powyżej, ale tylko z jedną klatką).
Dodatkowe zasady i wyjaśnienia:
Ty (lub twój program) możesz wybrać, czy komórki „żywe” mają być reprezentowane jako białe, a „martwe” jako czarne, lub odwrotnie. Oznacza to, że możesz to zakodować na stałe lub twój program może wybrać go na podstawie obrazu wejściowego. (Ale musi być taki sam dla każdej klatki animacji.)
Warunki brzegowe powinny być okresowe, co oznacza, że komórki w skrajnej prawej kolumnie mają sąsiadów w skrajnej lewej kolumnie itp.
W przypadku animacji liczba klatek na sekundę zależy od Ciebie (lub Twojego programu); Wyobrażam sobie, że duże szybkości klatek będą działać dobrze dla przybliżania szarych pikseli.
Proszę zamieścić co najmniej dwa wyniki osadzone w odpowiedzi. Jeśli możesz opublikować wyniki ze wszystkich poniższych obrazów wejściowych, najlepiej jest.
Dopuszczalne jest przeskalowanie obrazów testowych, jeśli jest to konieczne do uzyskania plików gif o wystarczająco małych rozmiarach plików. Jeśli chcesz również link do większych plików, nie ma sprawy. Jeśli chcesz się pochwalić, znajdź pliki źródłowe w wyższej rozdzielczości.
Staraj się unikać posiadania zbyt wielu kontrolowalnych parametrów w kodzie - najlepiej, jeśli jedynym wejściem programu jest obraz. Wyjątkiem jest sytuacja, gdy chcesz mieć parametr kontrolujący liczbę klatek animacji, ponieważ wpłynie to na rozmiar pliku.
Możesz użyć programów zewnętrznych, aby zmienić format plików wejściowych i wyjściowych i / lub skompilować ramki wyjściowe w animację, jeśli chcesz. (Nie jest to wyzwanie związane z obsługą formatu plików).
To konkurs popularności , więc wygrywa odpowiedź z największą liczbą głosów.
Oto wybór zdjęć testowych, pochodzących głównie z innych pytań na tej stronie. (Możliwe, że później dodam dodatkowe „wejściowe” obrazy dodatkowe).
Na początek jest bardzo głupia próba odniesienia w Pythonie 2, która wykorzystuje fakt, że blok czterech kwadratów jest stabilną strukturą w Grze Życia. Po prostu przeskalowuje obraz wejściowy 4-krotnie, a następnie rysuje blok, jeśli odpowiadający mu piksel jest ciemniejszy niż 0,5.
from skimage import io
from skimage import transform
import sys
img = io.imread(sys.argv[1],as_grey=True)
source = transform.resize(img, [i/4 for i in img.shape])
img[:]=1
for x in xrange(source.shape[0]):
for y in xrange(source.shape[1]):
if source[x,y]<0.5:
img[x*4, y*4] = 0
img[x*4+1, y*4] = 0
img[x*4, y*4+1] = 0
img[x*4+1, y*4+1] = 0
io.imsave(sys.argv[2], img)
Oto kilka wyników z przykładowego kodu. Jestem pewien, że możliwe są znacznie lepsze wyniki.
Odpowiedzi:
Pyton
Proszę zezować:
Kod stempluje najbielsze piksele najlepiej dopasowaną standardową martwą naturą . Istnieje argument odcięcia, więc możesz zdecydować, czy dojdzie do zaokrąglenia do progu czarno-białego. Eksperymentowałem z „żywą bielą”, a wynik jest taki sam.
źródło
#Python
Jawa
Podejście oparte na wykrywaniu krawędzi. Wymaga tego pliku tekstowego w uruchomionym katalogu.
Niektóre wyniki:
źródło
C ++
Proste pikselowanie z wykorzystaniem średniej z każdej siatki 8x8 w celu wybrania siatki wyjściowej 8x8 („tekstury kolorów”). Każda siatka wyjściowa 8x8 ma separator 2-komorowy u góry i po prawej stronie. Siatki zostały zaprojektowane od 4 martwych komórek do 18 martwych komórek w pozostałych 6x6 pikselach.
Program działa jak filtr od binarnego PGM do binarnego PBM. Domyślnie obrazy są „ciemne”; czerń to śmierć, a biel to życie;
-i
odwraca to.-g [value]
dodaje gamma, która jest używana do zważenia średnich przed wybraniem tekstur kolorów.Wybrane wyniki (uwaga: wszystkie PBM zostały przekonwertowane na PNG przy użyciu programu zewnętrznego do przesyłania):
Escher, gamma 2.2
Mona Lisa, gamma 2.2
Ocean, odwrócona gamma 2.2
Szczeniak, gamma 2.2
Zdrada obrazów, odwrócona gamma 2.2
Dla porównania Mona Lisa gamma 2.2, odwrócona
źródło