Zawsze lubiłem ekrany pełne losowo kolorowych pikseli. Są interesujące, a programy, które je rysują, są fajne do oglądania.
Wyzwanie
Wypełnij ekran lub okno graficzne kolorowymi pikselami.
Zasady
- Twój program musi mieć równą szansę na wybranie wszystkich kolorów (tj. W zakresie
#000000
do#FFFFFF
) lub wszystkich kolorów, które mogą być wyświetlane w twoim systemie. - Twój program musi nadal wyświetlać losowe piksele, dopóki nie zostanie ręcznie zatrzymany (nie może sam się zakończyć).
- Pikseli może być dowolnej wielkości, tak długo, jak wyjście ma co najmniej 40x40 „pikseli”.
- Twój program musi działać z taką prędkością, aby mógł zastąpić każdy piksel na ekranie / oknie przynajmniej raz po uruchomieniu przez trzy minuty.
- Twój program musi wybrać naprawdę losowe kolory i punkty do zastąpienia, tj. Losowe, przy czym wszystkie punkty / kolory są jednakowo prawdopodobne. Nie może po prostu wyglądać losowo. Musi używać pRNG lub lepszego, a wynik nie może być taki sam za każdym razem.
- Twój program musi mieć równe szanse na wybranie wszystkich kolorów podczas każdej iteracji .
- Twój program musi zastąpić tylko jeden piksel na raz.
- Twój program nie może korzystać z Internetu ani systemu plików (
/dev/random
i/dev/urandom
wyjątek).
Przykład
Twój wynik może wyglądać tak, jeśli zostanie zatrzymany w przypadkowym czasie:
Zwycięzca
Zwycięża najkrótsza odpowiedź w każdym języku. Baw się dobrze!
It must use a pRNG or better
Odpowiedzi:
Minecraft 1.12 Redstone Command Blocks,
4355 2872 bajtów(Rozmiar zależy od wielkości zapisanego pliku bloku struktury).
Oto pełny przegląd YouTube , ale postaram się nakreślić poniższy kod.
Procedura konfiguracji:
To ustawia siatkę 40x40 stojaków na zbroję Minecraft. Stojaki na zbroję są konieczne, ponieważ Minecraft nie ma możliwości zastąpienia zmiennych współrzędnymi świata . Obejście polega więc na lokalizacji tych stojaków na zbroję.
Ten nazwany stojak na zbroję jest w zasadzie naszym „kursorem” do umieszczenia wszystkich stojaków na zbroję, których będziemy potrzebować. Blok z czerwonego kamienia w ostatnim kroku „zasila” bloki w pobliżu (w tym nasze bloki poleceń), więc rozpoczyna następną pętlę:
W tym momencie nasza siatka jest kompletna:
Wybór koloru losowego
Fioletowe repeatery na środku tego obrazu wybierają losowy kolor za pomocą następującego polecenia:
To, że „@r []” to magiczny sos, wybiera losową istotę na świecie, która spełnia podane warunki . W tym przypadku znajdzie stojak na zbroję w promieniu 9 bloków , a my ustawiliśmy 16 stojaków na zbroję, po jednym dla każdego koloru wełny. Pod wybranym kolorem umieszcza blok czerwonego kamienia (który zasila dwa bloki poleceń po obu stronach).
Selektor losowych pikseli
Umieszczenie bloku czerwonego kamienia pod wybranym kolorem wełny powoduje uruchomienie dwóch kolejnych bloków poleceń:
Ta pierwsza linia używa tego samego polecenia magic @r, aby wybrać dowolny stojak na zbroję na całej mapie (bez ograniczenia promienia, więc obejmuje siatkę 40x40), i umieszcza wełnę wybranego koloru nad głową. X określa kolor i zawiera się w przedziale od 0 do 15. Drugie polecenie usuwa blok redstone, dzięki czemu jest gotowy do ponownego użycia.
Mam 5 fioletowych bloków repeatera, a czerwony kamień działa w „tyknięciach” 20 razy na sekundę, więc umieszczam 100 pikseli na sekundę (pomijając niektóre nakładki kolorów). Zmierzyłem czas i zwykle pokrywam całą siatkę w około 3 minuty.
To była dobra zabawa, postaram się poszukać innych wyzwań, które mogą również zadziałać w Minecraft. Ogromne podziękowania dla lorgon111 za jego serię samouczków na temat bloku poleceń YouTube .
EDYCJA: Poważnie zmniejszyłem rozmiar zapisanej struktury, teraz o 2872 zapisanych bajtów :
Testowane przez wciągnięcie zapisanej struktury do nowego świata, wszystko nadal działa zgodnie z planem.
EDYCJA 2 : Łącze Dropbox tylko do odczytu do pliku struktury NBT
Opis przejścia znajduje się w moim filmie na YouTube , ale oto kroki:
\structures
folderu utworzonego w ramach bieżącego zapisu świata./give @p structure_block
i/tp @p -12, 56, -22
przeskocz we właściwe miejsce, aby zacząć.źródło
shortest answer in each language wins
i to jest najkrótsza odpowiedź w Minecraft: P ma dodatkowe +15sh + ffmpeg, 52 bajty
Czy ffmpeg liczy się jako esolang? :RE
Niestety pix_fmt jest wymagany, ponieważ ffmpeg ma domyślną wartość yuv420p. To nie spełnia wymogu „musi mieć jednakowe prawdopodobieństwo każdego możliwego koloru piksela”. Dogodnie
cif
jest skrótem do dość dużego rozmiaru wideo, który zajmuje mniej miejsca niż „40x40”.Nic dziwnego, że optymalizacja tego gifu za pomocą gifsicle nie zrobiła absolutnie nic. To 4MiB.
źródło
C w POSIX,
98969592 bajtów-3 dzięki Tasowi
Wybiera 16 kolorów (ciemnoszary, czerwony, zielony, niebieski, pomarańczowy, cyjan, fioletowy, jasnoszary, czarny, różowy, jasnoniebieski, żółty, jasnoniebieski, magenta, biały) i drukuje je bezpośrednio na terminalu.
Pamiętaj, że jeśli twój procesor graficzny jest zbyt wolny, może się wydawać, że aktualizuje cały ekran na raz. Rzeczywiście idzie piksel po pikselu, ale C jest szybki.
Alternatywne rozwiązanie, które sprawia, że kolory są bardziej wyraźne:
Dowód, że idzie piksel po pikselu (zrzut ekranu z alternatywnego programu):
Wow, to wygląda prawie trójwymiarowo ...
źródło
;
kompilacji poprawnie, ale wydaje się, że działa świetnie poza tym! B-)while
celufor
.#define r rand()
a następnie użyćr%40, r%40, r%2, r%8
JS + HTML
162 + 32 (194)124 + 13 (137) bajtówPodziękowania dla Luke'a i innych komentujących za uratowanie mi dużej ilości bajtów.
źródło
<canvas id=c>
powinno wystarczyć, ponieważ uważam, że domyślny rozmiar elementucanvas
jest,300 x 150 px
a więc przekracza twój „rozmiar rzutni” wynoszący99 x 99 px
. W każdym razie fajne rozwiązanie.2d
. (Nie wiem, jak to sformatować, ale jeśli „2d” jest dosłownie szablonem, nie potrzebuje nawiasów.) (Usuwanie moich wcześniejszych sugestii).with
oświadczenia, aby pozbyć się wszystkich przypadkówb.
:r=n=>n*Math.random()|0 setInterval("with(c.getContext`2d`)fillStyle='#'+r(2**24).toString(16),fillRect(r(99),r(99),1,1)")
MATL, 28 bajtów
Wypróbuj w MATL Online .
.5Y.
Do tej wersji dodałem półsekundową pauzę ( ).Wyjaśnienie
źródło
TI-BASIC (tylko 84 + C (S) E),
3735 bajtówZ powodu ograniczeń sprzętowych nastąpi awaria, ponieważ za każdym razem, gdy program jest zagnieżdżony w programie w TI-BASIC , przydzielane jest 15 KB pamięci RAM, aby „zachować zakładkę” w programie nadrzędnym. Działa to dobrze na „teoretycznym” kalkulatorze z nieskończoną pamięcią RAM, ale jeśli chcemy, aby działał bez końca na prawdziwym kalkulatorze, możemy po prostu owinąć go w
While 1
pętlę o dodatkowe 2 bajty:Rodzina kalkulatorów TI-83 z kolorowymi ekranami (TI 84 + CE i CSE) obsługuje 15 kolorów. Mają kody kolorów
10
przez24
. Cykl przechodzi przez wszystkie piksele w5!
kwadracie 120 na 120 ( ) i przypisuje każdemu losowy kolor.Wynik:
źródło
5!
gdybym chciał 120 pikseli.For(
To 1 bajt,Pxl-On(
1 bajt,randInt(
2 bajty itp.MATLAB, 56 bajtów
Dane wyjściowe wyglądają jak na poniższym obrazku. Jeden „piksel” zmienia się na raz i zmienia się tylko jeden z kolorów RGB.
Dlaczego? Kolory w MATLAB są reprezentowane jako macierz 3D, jedna warstwa dla R, G i B. Powyższy kod zmienia tylko jedną z warstw na iterację. Wszystkie piksele i wszystkie warstwy można zmienić, więc jeśli trochę poczekasz, wszystkie kolory są jednakowo możliwe we wszystkich pozycjach.
Dodaj
pause(t)
wewnątrz pętli, aby wstrzymaćt
sekundy między każdym obrazem.Musisz zatrzymać to za pomocą Ctrl+ C.
źródło
where
Your program must have an equal chance of picking all colors/points each iteration
. Czy twój program to spełnia?Bash + coreutils,
5956 bajtów\e[48;5;COLORm
jest zabezpieczeniem ucieczki od koloru tła.Każdy „piksel” ma szansę za każdym razem znajdować się w zakresie [0..16777215].
źródło
jot
:for((;;)){ printf "\e[48;5;`jot -r 1 0 16777215`m ";}
JavaScript + HTML 118 + 13 (131 bajtów)
#7
nie jest ważny kolor, albo#777
i#777777
są tego samego koloru (2x szanse)źródło
Excel VBA,
13110285 bajtówAnonimowa funkcja bezpośredniego okna VBE, która korzysta z funkcji pomocniczej (patrz poniżej), aby wyprowadzić tablicę losowo zabarwionych komórek do zakresu
A1:AN40
obiektu arkusza aktywnego.Uwaga: to rozwiązanie jest ograniczone do 32-bitowych instalacji MS Excel (a zatem i pakietu Office jako całości), ponieważ
8^8
nie będzie się kompilować w 64-bitowych wersjach VBAPrzykładowe dane wyjściowe
Poprzednia wersja
Funkcja pomocnika
Generuje losową liczbę int w zakresie [0,255]
źródło
C #,
369288287 bajtówZaoszczędź 88 bajtów dzięki @CodyGray.
Pełny program, który przenosi uchwyt do ekranu i jego rozmiar, a następnie zaczyna losowo na nim rysować piksele. Pamiętaj, że może to spowodować zatrzymanie twojej karty graficznej po uruchomieniu. Również jeśli ekran lub jakakolwiek kontrolka zdecyduje się na odświeżenie w dowolnym momencie, piksele zostaną utracone i będą musiały zostać przerysowane.
Uwaga: Podczas uruchamiania skup się na oknie, aby go zabić, musisz albo Alt + F4, albo nacisnąć przycisk zamykania i robienie tego, gdy nie widzisz ekranu, jest trochę trudne.
Nie mogłem nagrać tego działania za pomocą ScreenToGif, ponieważ zmuszało to do odmalowania, aby piksele zostały usunięte. Jednak tutaj jest zrzut ekranu z jego działaniem po około 10-15 sekundach i myślę, że mogłem zatrzymać swój komputer! Luka w prawym górnym rogu to miejsce, w którym ekran wymusił odmalowanie w momencie, gdy zrobiłem zrzut ekranu.
Wersja pełna / sformatowana:
Wersja dla
308227226 bajtów, która korzysta tylko z regionu 0-40:Przykładowe dane wyjściowe dla tego:
źródło
Graphics.FromHwnd((IntPtr)0)
będzie również działać i będzie znacznie krótszy niż P / InvokingGetDC
. Oczywiście, twój kod wciąż jest podobny do kodu Tasa i przecieka zasoby jak szalone, dlatego zatrzymuje maszynę po krótkim czasie działania.GetDC
nie wraca,IntPtr.Zero
więc wysłanie tego doFromHdc
nie zadziała.FromHdc
, sugeruję, abyś zadzwoniłFromHwnd
. Zauważ, że kiedy wywołujesz wGetDC
celu uzyskania kontrolera domeny dla uchwytu okna, przekazujesz wskaźnik NULL (0) jako uchwyt okna.Konsola C #,
233220189188 bajtówUżywa 16 wszystkich kolorów konsoli (Windows).
Dzięki za „funkcję”, która umożliwia aliasowanie klas w języku C # za pomocą
using
dyrektywy.Edytuj nr 1
Usunięto niektóre spacje.
Usunięto zera z Random.Next ()
Poszedłem do
namespace system{...}
Edytuj # 2
Minimalny rozmiar siatki to 40x40
Jeden bajt, deklarując Losowy w nagłówku pętli
Usunięto
public
z metody głównejEdytuj # 3
Okazuje się
using C=Console;
to nie najlepszy jest.using static Console
przypomina sposób VB.Net do „importowania” klasPoddaję się: TheLethalCoder sprawił, że tak się stało
Oryginalny kod do dostosowania rozmiaru okna na 207 bajtów:
Oryginalny obraz:
źródło
namespace System
powinien oszczędzać bajty,r.Next
może usunąć zero, wierzę, Usuń niepotrzebne białenamespace System{}
jest krótszy niżusing System;
. Chcesz to wyjaśnić?Main
. Nieuzasadnione wspomnienia są najlepsze!Przetwarzanie, 90 bajtów
rozwinął i skomentował:
Idealnie byłoby użyć indeksu pikselowego zamiast lokalizacji x, y, ale
pixels[]
dostęp do Przetwarzania wymagaloadPixels()
wstępnego iupdatePixels()
końcowego, stąd użycieset()
.point()
też by działał, ale ma więcej znaków i wymagastroke()
. Losowy obszar to tak naprawdę 99 x 99, aby zaoszczędzić kilka bajtów (zamiast 100 x 100), ale powinno to obejmować 40 x 40 każdego piksela w takim obszarze, który ma zostać zastąpiony.Zamiast losowego () stosuje się szum Perlin (), aby był bardziej pseudolosowy i krótszy o bajt. Wartość jest obliczana jeden raz, ale używana dwa razy: raz dla losowej pozycji, potem ponownie dla koloru.
Kolor to w rzeczywistości
ARGB
(00000000 do FFFFFFFF) (nie RGB) (punkty bonusowe?: D).źródło
set()
to bardzo fajna sztuczka i może być bardzo przydatna w przypadku wskazówek dotyczących gry w golfa w przetwarzaniuPython, 133 bajty
Nie jestem do końca pewien, czy to pasuje do specyfikacji, ponieważ jest na płótnie w obszarze 40 x 40.
Wypróbuj online - wersja bez
eval
, która nie działa w Trinketźródło
colormode
jest1.0
nie255
.colormode
i nie miałbym nic z tego: /dot(1,R(0,255),R(0,255),R(0,255))
nie działa?dot
ma na celu zaakceptowanie(width,*color)
. To nie jest Python: pJavaScript za pomocą Canvas
340 316324 bajtówpełna wersja
źródło
Przetwarzanie, 112 bajtów
Nie mogę zagwarantować, że każdy piksel jest wymieniany co 3 minuty, ale patrząc na to, wydaje się, że tak się dzieje. Przynajmniej szansa na brak piksela, z 1600, aktualizowanie losowego 30x na sekundę, w sumie 5400 aktualizacji na 3 minuty, sprawia, że jest mało prawdopodobne, że zostanie pominięty.
Nie golfowany:
Program jest naprawdę prosty. Otwórz okno o wymiarach 40 x 40 pikseli, a każda klatka (domyślnie 30 na sekundę) otrzyma losowy kolor i narysuje punkt o losowej współrzędnej między 0 a parametrem. 40 dla współrzędnych pikseli, 255 dla kolorów.
źródło
size(40,40);
i zmienićpoint
napoint(random(99),random(99));
? (lub 100 zamiast tego, jeśli 99 nie działa)size
funkcja MUSI być pierwszą linią kodu w funkcji konfiguracji (powody, dla których są skomplikowane), więc nie mogę tego obejść. Mogę zmienić wszystkie wystąpienia z 40 na 99, po prostu tego nie zrobiłem, ponieważ nie zaoszczędziło mi to miejsca. Głównie wybrałem minimalny rozmiar, aby zwiększyć szanse, że każdy piksel zostanie odświeżony w ciągu 3 minutsetup()
funkcji w najnowszej wersji Przetwarzania na moim komputerze działa dobrze bez błędów.HTML + SVG + PHP, 245 bajtów
Rozszerzony
Przykład danych wyjściowych bez metatagu oraz w wyższej wersji
źródło
C ++ w systemie Windows, 125 bajtów
Konieczne są nowe linie i są one uwzględnione w liczbie bajtów.
Pętle na zawsze, losowo wybiera pozycję między 0 a 255 (włącznie) dla wartości wierszy i kolumn, przypisuje losowe wartości R, G, B między 0-255 (włącznie)
źródło
#include
s. (I tak, istnieją kompilatory inne niż Visual Studio C dla systemu Windows.)Python 3.6 + Tkinter, 281 bajtów
źródło
tkinter
jest to standardowa biblioteka, nie musisz umieszczać jej w nagłówkuc.create_image((20,20),i) File "C:\Python36\lib\tkinter\__init__.py", line 2483, in create_image return self._create('image', args, kw) File "C:\Python36\lib\tkinter\__init__.py", line 2474, in _create *(args + self._options(cnf, kw)))) _tkinter.TclError: unknown option "pyimage1"
JavaScript (ES7) + HTML przy użyciu SVG, 129 + 10 = 139 bajtów
Wersja SVG, silnie inspirowana podejściem @ Octopus
<canvas>
.JS
HTML
Ponieważ Fragment kodu lubi łamać skrypt podczas analizowania
<rect>
tagu, oto CodePen .źródło
6502 Zestaw, 92 bajty
Wynik:
Wyjaśnienie:
źródło
LOGO, 71 bajtów
Jedyny język, który znam, ponieważ nie jest ezoteryczny / specjalnie zaprojektowany do kodowania i ma
forever
funkcję. Masz jakiś pomysł zemap
strony?źródło
shortC ,
6656 bajtów-10 bajtów dzięki Dr. Rand. : P
Brak linku TIO, ponieważ oczywiście nie można drukować na terminalu wymaganym online.
źródło
Perl (on * nix), 69 bajtów
Do
\x1b
s to literalne znaki ewakuacyjne.Opiera się na
stty
poleceniach i działa dobrze w systemie OS X.Podobne do innych podejść, ale podobało mi się połączenie wszystkich parametrów w jednym wywołaniu,
printf
więc pomyślałem, że podzielę się. Zabija mój terminal.Dwa razy więcej pikseli, 83 bajty
Podejście to wykorzystuje blok Unicode
▄
oraz losowy kolor pierwszego planu i tła, co daje bardziej kwadratowy piksel. Zabija też mój terminal, ale wygląda fajniej.źródło
\e
. Na StackExchange może to być reprezentowane przez␛
.-e
! Muszę również zwiększyć liczbę bajtów tego z Unicode. Ups! Dzięki za przypomnienie!Bash, 104 bajty
Do
\e
s to literalne znaki ewakuacyjne.To są właściwie tłumaczenia mojego przedłożenia Perla, ale przy użyciu składni typu bash fork bomba! Obawiam się, że nie jest tak sprytny jak inny wpis bash, który zapisuje bezpośrednio na wyświetlaczu.
Więcej pikseli, 130 bajtów
Podobnie jak moja odpowiedź na Perla, używa on znaku Unicode na pierwszym planie i koloruje również tło każdego piksela.
źródło
"\e[48;5;%im"
. Dlaczego numery 48 i 5 są konieczne?\e[48;2;RRR;GGG;BBBm
ale obsługuje go bardzo niewiele emulatorów terminali ... :(38;5
oznacza pierwszy plan i48;5
deonuje tło. misc.flogisoft.com/bash/tip_colors_and_formattingx86 maszyna język (w trybie rzeczywistym) dla IBM PC,
2019 bajtówWymaga to procesora z
rdrand
instrukcją i adaptera VGA (rzeczywistego lub emulowanego). Powyższe można skopiować do bloku rozruchowego lub pliku MS-DOS * .COM.Aby to wypróbować, skompiluj poniższe i zapisz dane wyjściowe do pliku takiego jak
floppy.img
i uruchom obraz na maszynie wirtualnej.źródło
Super Chip (48) ?, 12 bajtów
Nie jestem pewien dokładnej nazwy, ale musiałem użyć tego zamiast normalnego Chip-8 z powodu ograniczenia 40x40 pikseli.
źródło
QBIC , 34 bajty
Niestety QBIC nie ustawia
SCREEN
domyślnie trybu, więc zjada niektóre bajty.PSET
to niedozwolone polecenie w domyślnym kontekście graficznym QBIC.Wyjaśnienie
Próbka wyjściowa
@ Anonimowy znalazł błąd w
rnd()
funkcji QBIC . Naprawianie, które daje wynik poniżej. Dzięki!źródło
FUNCTION getRandomNumber! (Bottom!, Top!) ↵ RANDOMIZE TIMER 'this sets the random number generator ↵ IF Bottom > Top THEN ... END IF ↵ getRandomNumber = INT((Top - Bottom + 1) * RND + Bottom) ↵ END FUNCTION
liczb losowych : Twoje liczby losowe są tylko skrótem bieżącego czasu.Zestaw 6502, 582 bajty
Uff, było fajnie. Robi mniej więcej to samo, co moje podstawowe rozwiązanie Applesoft BASIC.
źródło
PowerShell,
128126124 bajtów-2 bajty dzięki @ Veskah
Wynik:
Wyjście kodu VS:
źródło