To wyzwanie jest na cześć tandetnych lampek choinkowych w moim domu prawniczym.
Wyzwanie polega na stworzeniu graficznego wyniku przedstawiającego dekorację w „czasie rzeczywistym”.
Wideo (gif lub inny format) będzie miało pionowe i poziome „światła” n-by-m . 5 <= m, n <= 40 . Wielkość ramy i rozdzielczości może zmieniać się w zależności od n i m , jednak musi być co najmniej 50x50 pikseli o n M = 5 (grafiki wektorowe jest OK). Obraz z n=6
i m=5
będzie wyglądał mniej więcej tak:
Dekoracja:
Zabarwienie:
Wszystkie światła będzie mieć jedną z następujących 6 kolorów RGB {255,0,0}
, {0,255,0}
, {0,0,255}
, {255,255,0}
, {0,255,255}
i {255,0,255}
.
Animacja:
n
im
będą pobierane jako dane wejściowe w dowolnym rozsądnym formacie i w dowolnej kolejności- Obraz zmieni się co
dt = 25 ms
. Odchylenia są OK, jeśli wynika to z „czynników zewnętrznych”, takich jak ograniczenie tłumacza, powolny komputer itp.- Jeśli niemożliwe jest ręczne ustawienie kroku czasu, wówczas domyślny krok czasu jest akceptowany.
- Wszystkie lampki będą świecić na czerwono (
{255,0,0}
) ot=0
. - Zawsze istnieje 5% szans, że pierwsze światło (u góry po lewej) zmieni kolor. Wszystkie kolory (oprócz koloru, który obecnie ma) powinny być jednakowo prawdopodobne.
Każde światło (oprócz pierwszego) otrzyma kolor światła po swojej lewej stronie. Jeśli światło znajduje się najdalej po lewej stronie, otrzyma kolor światła po prawej stronie w rzędzie powyżej. Światła są ponumerowane, jak pokazano poniżej. Jasna liczba
k
otrzyma kolor jasnej liczbyk-1
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Dane wyjściowe powinny teoretycznie działać wiecznie (chyba że Twój język / tłumacz ma jakieś ograniczenia, które temu zapobiegają).
- Podaj próbkę o długości co najmniej 5 sekund, najlepiej więcej w odpowiedzi (jest to zachęta, a nie wymóg). (Link do TIO lub podobnego jest oczywiście OK: D)
- Ramy, osie, linie siatki itp. Są akceptowane.
6 na 5
15 na 30
r,g,y,b,
itp. są krótsze w kilku językach.drawnow
kiedy zaimplementowałem to w MATLAB, ponieważ wynik był zbyt wolny. Myślę, że odpowiedź musi być następująca: jeśli jest to wybór projektowy, że interpreter ma ustaloną minimalną rozdzielczość czasową> = 25 ms, to jest OK. Jeśli jest to spowodowane słabą / prostą implementacją, tłumaczem internetowym, który jest przeciążony / wolny itp., To nie jest OK.Odpowiedzi:
JavaScript / CSS / HTML, 436 bajtów
źródło
Mathematica,
186161158 bajtówWyjaśnienie
Utwórz początkową planszę w 1D, wypełnioną czerwonym. Przechowuj to w
b
.Pauza na 25ms
Jeśli (pseudo-) losowa liczba rzeczywista jest mniejsza niż 0,06, zastąp pierwszy element
b
losową długością próbki3
listy{1,1,0,0}
. (tj. dowolny z{1, 1, 0}, {1, 0, 1}, {1, 0, 0}, {0, 1, 1}, {0, 1, 0}, {0, 0, 1}
)Cykliczny obrót w prawo.
Zmień wartość pierwszej komórki na drugą wartość komórki (tj. Cofnij przesunięcie pierwszej komórki)
Podział
b
na (wysokość).Zrób z tego dynamiczny (ciągle aktualizowany) obraz, którego szerokość wynosi 50 (szerokość)
Wersja automatu komórkowego (186 bajtów)
Przykładowe wyjście (wejścia: 16, 10)
źródło
MATLAB,
255210 bajtówTo jest mój pierwszy golf, więc prawdopodobnie należy wprowadzić ulepszenia.
Dzięki Luisowi za pomoc w zaoszczędzeniu 45 bajtów :)
Wyjaśnienie:
Niestety nie zapisuje to animacji, po prostu ją uruchamia. Aby go zapisać, potrzebuję programu do przechwytywania ekranu lub przepisuję wszystko za pomocą
imwrite
. Zamiast tego dostarczę dwa zdjęcia przedstawiające różne czasyn=15,m=30
.źródło
dec2bin([4 2 1 6 3 5])-48
zamiast[1 0 0;0 1 0;0 0 1;1 1 0; 0 1 1;1 0 1]
..95
zamiast0.95
. Można również zastąpić.95
przez.94
i pozbyć sięk=k(k~=r);
(bo 0,06 + 0,94 / 6 = 0,95; patrz moja odpowiedź na bardziej szczegółowe wyjaśnienie)c=dec2bin(1:6)-48
, ponieważ kolejność nie ma znaczeniaMATL ,
5247 bajtówDane wejściowe to tablica
[ncols nrows]
. Wyjście to postać z grafiką wektorową.Przykładowy przebieg dla 15 kolumn × 10 wierszy:
Jak to działa
Czas pauzy został ustawiony na 15 ms (dla tej samej liczby bajtów co 25 ms), aby spróbować zrekompensować czas przetwarzania.
Aby zachować kolor z prawdopodobieństwem 19/20 (zmień go na 1/20), postępujemy w następujący sposób:
Zatem prawdopodobieństwo utrzymania koloru wynosi 47/50 + 3 / (50 * 6) = 19/20.
źródło
MATLAB,
153147 bajtówUwaga : Pokazany GIF jest starszej wersji, co jest miłe, ponieważ nie wyświetla osi (patrz historia edycji), ale było bardzo wolne ze względu na implementację
imshow
. W obecnej wersji odpowiedź MATLAB Chelsea G. lub odpowiedź MATL Luisa Mendo pokazują ten sam wynik, co moja obecna wersja.Rozmiar jest traktowany jako
2x1
wektor, więc nazywamy go np .:Ta odpowiedź wykorzystuje subtelności języka MATLAB. Na przykład
x
jest inicjowany jakom x n
macierz zerowa, ale tak zwane indeksowanie liniowe pozwala na przesunięcie kołowe za pomocą wskaźników 1-wymiarowych. Słabe pisanie pozwala na mnożenie za pomocą logiki, dzięki czemuif
unika się instrukcji (sztuczka, którą często stosowałem w czasach programowania na kalkulatorze TI-84). Mimo że mapa kolorów jest odczytywana wierszowo, MATLAB traktuje ją jak normalną matrycę, dzięki czemueye(3)
można jej użyć do tworzenia czerwieni, zieleni i niebieskiego oraz1-eye(3)
pozostałych trzech kolorów. Prostyreshape
sprowadza wektor liniowy z powrotem do postaci matrycy, która jest odwzorowywana za pomocą pożądanych kolorówind2rgb
. Wreszcie,imagesc
, pokazuje obraz pokazany przy domyślnym rozmiarze figury (który jest wystarczająco duży dla wymagań). Życie to jest to,imagesc
nie przeszkadza wartości są poza określony zakres, więceye
może być używany do inicjalizacji macierzy ponieważ oba1
i0
są uważane czerwono.źródło
Python 3.6 (316 bajtów)
Używanie kodów kolorów ANSI i nowych sformatowanych literałów łańcuchowych w Pythonie 3.6 ( PEP 489 ) (
f"{X}"
magia).W przeciwnym razie jest to po prostu dość prosty, ale zaciemniony python. Szerokość i wysokość są przekazywane jako argumenty w wierszu poleceń.
źródło
w,h=map(int,sys.argv[1:])
, rozpakowanie działa z dowolnym iterowalnym (odpowiedniego rozmiaru), wywołanie listy jest zbędne."\x1b["
=>"\33["
(używając znaków ósemkowych zamiast znaków szesnastkowych), a następnie skrót X i ciągi formatujące faktycznief""
wydłużają go (i pozbywając się , uzyskujesz zgodność z dowolnym python3). (obniży to do 301 bajtów).{x}
raz ... ale wciąż wygrywasz z pozbyciem sięX
.