Wewnątrz odbiornika 5 x 5 znajduje się wirus. Ponieważ wiemy, w jaki sposób rozprzestrzenia się zanieczyszczenie, Twoim zadaniem jest wyjście z ostatniego etapu zanieczyszczenia.
Odbiorca
Będzie reprezentowany jako dwuwymiarowa tablica 5x5:
0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
Gdzie 1
oznacza pozycję, w której wirus został już zanieczyszczony, i 0
pozycję niezanieczyszczoną.
Jak rozprzestrzenia się wirus
- Zanieczyszczona pozycja nie może być czysta.
- Czysta pozycja zostanie zanieczyszczona w następnym etapie tylko wtedy, gdy co najmniej dwie jej sąsiednie pozycje (komórki północna, wschodnia, południowa i zachodnia) zostaną zanieczyszczone.
- Ostatni etap zanieczyszczenia ma miejsce, gdy nie można już zanieczyścić czystych komórek.
Próba
Wykorzystując jako etap 1 zanieczyszczenia opisanego powyżej odbiorcę, etap 2 będzie:
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
Etap 3 zanieczyszczenia będzie:
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Etap 4 zanieczyszczenia będzie:
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
A etap 5 (w tym przykładzie ostatni) będzie:
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Wyzwanie
Biorąc pod uwagę jeden stopień zanieczyszczenia, należy podać ostatni stopień zanieczyszczenia.
Możesz napisać pełny program lub funkcję. Możesz wziąć dane wejściowe jako tablicę / listę, jako oddzielne liczby, a nawet jako ciąg znaków. Wybiera najlepszy sposób, który pasuje do twojego języka.
Najkrótsza odpowiedź w bajtach wygrywa!
Kolejne przypadki testowe
Input:
1 1 0 0 1
0 0 0 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 1
Output:
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
Input:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
1 0 0 1 0
0 0 1 0 1
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
Output:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
źródło
1 0 1
wystąpić na wyjściu? Czy środkowe zero nie sąsiaduje z dwoma1
?1 0 0 1 0 \ 0 0 1 0 1 \ 0 0 0 0 0 \ 1 0 0 0 0 \ 0 0 1 0 0
jako przypadek testowy?0 1 0 0 0 \ 0 0 0 0 1 \ 0 0 1 0 0 \ 1 0 0 0 0 \ 0 0 0 1 0
, który pozostaje niezmieniony.Odpowiedzi:
Ponieważ w zasadzie chodzi o automat komórkowy, daję ci ...
Reguła Golly Quicklife, 10 bajtów
Wprowadź regułę, wklej siatkę do Golly, uruchom wzór. Powstały wzór jest wynikiem.
Wyjaśnienie:
Lub jeśli nalegasz na pełną regułę RuleLoader, 89 bajtów:
Nazwa reguły to X, takie same kroki jak poprzednio.
źródło
B3/S23
co może zrobić wszystko! ... Ale ma ścisły format wejściowy (tak jak cały program jest zawarty w danych wejściowych (jak inaczej byś to zrobił?)). ALE DLACZEGO ZRININOWAĆ ZABAWĘ?Python 2, 97 bajtów
Wypróbuj online . Dane wejściowe są traktowane jako ciąg cytowany, a każdy wiersz jest oddzielony znakiem nowej linii. Nie
980
jest optymalna i można ją zastąpić mniejszą wielokrotnością 35. Ponieważ nie ma to wpływu na długość tego programu, pozostawiłem ustalenie najniższej bezpiecznej górnej granicy jako ćwiczenie dla czytelnika.źródło
JavaScript (ES6),
918987 bajtówJako funkcja, która przyjmuje dane wejściowe jako tablicę liczb lub ciągów znaków.
-2 bajty od Neila (łączenie przypisania
y
z konwersją ciągów)-2 bajty (usuwanie zmiennej
j
)źródło
(y=...)+''==x
zamiast(y=...),y+''==x
.MATL , 22 bajty
Działa to w bieżącej wersji (15.0.0) języka.
Wypróbuj online !
Format wejściowy to: tablica 2D z wierszami oddzielonymi średnikami. Zatem cztery przypadki testowe mają następujące dane wejściowe:
Wyjaśnienie
Powoduje to wielokrotne splatanie 2D tablicy wejściowej za pomocą następującej maski, która określa, którzy sąsiedzi liczą się jako zanieczyszczający:
Aby uzyskać wynik o takim samym rozmiarze jak pierwotna tablica, jest ona najpierw wypełniana ramką zer, a następnie zachowywana jest tylko „ważna” część splotu (tzn. Bez efektów krawędzi).
Próg 2 jest stosowany do wyjścia splotu, a wynik jest elementarny ORed z oryginalnym wejściem.
Tę czynność należy wykonać wystarczającą liczbę razy, aby zapewnić osiągnięcie ostatecznego stanu. Proste kryterium, które to spełnia: iteruj tyle razy, ile jest wpisów w tablicy wejściowej (czyli 25 razy w przypadkach testowych).
źródło
TI-BASIC, 151 bajtów
Wprowadź jako
[[1,0,0,1,1][1,0,0,0,0]...]
.źródło
Repeat
pętli.Lua, 236 bajtów
Akceptuje dane wejściowe z wiersza poleceń i używa manipulacji ciągiem Lua, aby uzyskać odpowiedź.
Nie golfowany:
źródło
APL,
767270 bajtówTo polega na: rozszerz macierz do macierzy 7x7, a następnie wyśrodkuj nasz argument (omega). Z tej macierzy wygeneruj 4 macierze „potomne”, każda przesunięta w innym kierunku (góra / dół / lewo / prawo), dodaj je razem (aby uzyskać liczbę sąsiadów), upuść ramkę (aby wrócić do Matryca 5x5). Lub ta nowa matryca ze „starą”, aby upewnić się, że nie upuściliśmy żadnych komórek w procesie (tj. Na krawędzi). Następnie użyj
⍣≡
kombinacji, aby uzyskać stałą wartość punktu.przykład (biorąc pod uwagę, że funkcja została przypisana
contaminate
):źródło