Tło / opis
Uwaga: jak wskazuje @HelkaHomba, rzeczywiste identyfikatory GitHub nie są w rzeczywistości losowe, ale oparte na haszowaniu nazwy użytkownika
Domyślny awatar GitHub to obraz 5 x 5 pikseli. Kolor jest wybierany losowo, a następnie losowe piksele są wypełniane po jednej stronie (po prawej lub lewej stronie, rozmiar 2x5) przy użyciu tego koloru. Następnie ta strona jest kopiowana i odwracana na drugą stronę, wzdłuż osi y. Pozostałe piksele, które nie są wypełnione, to # F0F0F0 lub rgb (240,240,240).
Piksele w środkowej kolumnie (rozmiar 1x5) są następnie losowo wypełniane przy użyciu tego samego koloru, co poprzednio.
Wydajność
Uwaga: w przypadku tego wyzwania zignorujemy przestrzeń otaczającą awatary GitHub
Program powinien wypisać plik obrazu 5 x 5 pikseli. Szczegółowe informacje można znaleźć na stronie http://meta.codegolf.stackexchange.com/a/9095/42499
Przykłady
Uwaga: zostały one oczywiście powiększone w stosunku do 5 x 5, dzięki czemu można je zobaczyć
Powodzenia!
źródło
Odpowiedzi:
Pyth - 27 bajtów
Oczywiście nie działa w trybie online, ale można go wydrukować kody kolorów tutaj .
źródło
Perl 5 , 77 bajtów
Jest to niekonkurencyjne, ponieważ ma tylko paletę 256 kolorów, działa tylko na terminalach, które obsługują kody ucieczki ANSI i faktycznie nie generują obrazu o wielkości 5 pikseli kwadratowych, ale pomyślałem, że i tak opublikuję to, ponieważ fajnie jest grać w golfa na dół.
Uwaga: w
\e
rzeczywistości jest to znak ASCII\x1B
.Stosowanie
Wyjaśnienie
Nic szczególnie sprytnego, może poza:
$-
do automatycznego zaokrąglania numeru koloru do użycia w sekwencji ucieczki, używanej zamiast$n=0|rand 254
.Przykładowe dane wyjściowe
źródło
MATL ,
3629 bajtówTo zapisuje wynik w pliku
a.png
.Zastąpienie
'a'
przez2
w kodzie powoduje wyświetlenie obrazu (przeskalowanie) zamiast zapisywania pliku:Oto przykładowy wynik:
Wyjaśnienie
źródło
Właściwie 53 bajty
Wypróbuj online!
W rzeczywistości jest zły w przetwarzaniu ciągów. Myślę, że wspominałem o tym wcześniej. Ten program wyświetla obraz P6 netpbm przy użyciu CP437, podobnie jak poniżej:
Można to przekonwertować do formatu PNG za pomocą ImageMagick:
Skalowana wersja PNG:
Wyjaśnienie:
źródło
ppm
obraz.Python,
167164155148 bajtówWyjście w ppm
range(5)
do" "*5
print
map
tylko odtądstr(p)
użytoexec""*5
zamiast tegofor _ in " "*5:
Pewne ulepszenia w stosunku do starego kodu opartego na łańcuchach znaków:
źródło
Swift 2.3,
593585 bajtówAktualizacja
Swift 3, 551 bajtów
Jestem w WWDC i właśnie dostałem Xcode 8 w wersji beta z Swift 3. Apple wykonało niektóre z połączeń CoreGraphics bardziej „Swifty” i jestem w stanie zmniejszyć liczbę bajtów.
Kod Swift 2 Ungolfed:
Ta odpowiedź zakłada, że UIKit jest dostępny i korzysta ze struktury Cocoa Touch.
Niektóre przykładowe obrazy wyjściowe:
Wiem, że nie mogę konkurować z większością innych odpowiedzi, ale chciałem dać temu szansę jako osobiste wyzwanie. Ta odpowiedź zdecydowanie wymaga poprawy, ale myślę, że trudno będzie obniżyć ją poniżej kilkuset bajtów ze względu na długość nazw metod zapisu obrazów UIKit i CoreGraphics. Jako ćwiczenie dla siebie zdecydowałem się napisać rzeczywisty plik PNG zamiast wartości PPM, ale zdecydowanie krótsze odpowiedzi byłyby możliwe, gdybym użył formatu PPM.
I już zaczynają jako straty poprzez zadeklarować zmienną do materiału siewnego
srand48
ztime
. Wybrałem to ponadarc4random()
lubarc4random_uniform()
ponieważ ostatecznie stracę z nimi więcej bajtów. Rozstawiam rng, aby użyćdrand48
do wygenerowania losowego koloru i wybieram, kiedy napisać kolor na piksel.CGSize
vsCGSizeMake
iCGRect
vsCGRectMake
:Przełączam się między wbudowanymi funkcjami API C i ich rozszerzeniami Swift, aby znaleźć najkrótszy konstruktor dla każdej z nich.
CGSizeMake
kończy się na niższym niżCGSize()
iCGRect
kończy się naCGRectMake()
:Musiałbym stworzyć
CGFloat
sx
iy
ze względu na naturę pętli for. Naprawdę nie jestem zachwycony pętlą 2D i sprawdzaniem równości, ale naprawdę starałem się znaleźć krótszą drogę. Zdecydowanie jest tu miejsce na ogolenie kilku bajtów.Wywoływanie
CGContextFillRects
za pomocą tablicyCGRect
struktur jest tańsze niż wywoływanieCGContextFillRect
dwukrotnie przy użyciu dwóch różnych wartości, więc zapisuję kilka bajtów za pomocą tablicy i wskaźnika.Zapisuję również 27 bajtów, nie dzwoniąc
UIGraphicsEndImageContext()
. Chociaż normalnie byłby to „błąd” w kodzie produkcyjnym, nie jest to konieczne w przypadku tego programu zabawkowego.Zabarwienie:
Kolory są również trudnym problemem, ponieważ tworzę
UIColor
obiekty, ale muszę pisaćCGColor
nieprzejrzysty typ dla każdego piksela. Najkrótszym kodem, który znalazłem, aby stworzyć losowy kolor, było użycieUIColor
konstruktora i uzyskanieCGColor
tegoUIColor
. To samo z białym. Gdybym używał frameworka Cocoa zamiast Cocoa Touch, mógłbym być w stanie zapisać niektóre bajtyCGColorGetConstantColor()
, ale niestety ta metoda jest niedostępna w Cocoa Touch SDK.Zapis do pliku:
Zapis do pliku zajmuje prawie 100 bajtów. Nie jestem pewien, jak nawet zoptymalizować to. W niektórych systemach, w zależności od twoich uprawnień, może być konieczne użycie katalogu Dokumenty, który byłby jeszcze dłuższy:
Zdecydowanie otwarty na dalsze optymalizacje.
Edycja 1: Zapisano kilka bajtów, przestawiając niektóre deklaracje zmiennych.
źródło
Mathematica,
1051029894 bajtów
jest operatorem transpozycji .Edycja 1: zapisane 3 bajty zastępując
Round
+RandomReal
zRandomInteger
Edycja 2: Zapisano 4 bajty, zastępując
RandomInteger
jeRandomChoice
Edycja 3: Zapisano 4 bajty, zastępując
RandomColor
iGrayLevel
przy pomocyRandomReal
źródło
MATLAB, 102 bajty
Cześć, to moje rozwiązanie Matlab:
Dane wejściowe
x
funkcji to nazwa pliku wyjściowego. Na przykład:tworzy obraz png o nazwie „output.png”.
Oto wyniki niektórych wykonań tego kodu.
źródło
Dyalog APL,
4342 bajty'P3',5 5 256,∊(3⍴240)(?3⍴256)[⌈(⊢+⌽)?5 5⍴0]
'P3',5 5a,∊(3⍴240)(?3⍴a←256)[⌈(⊢+⌽)?5 5⍴0]
Od prawej do lewej:
?5 5⍴0
generuje macierz liczb losowych 5 × 5 od 0 do 1 ( ale nigdy 0 lub 1 )(⊢+⌽)
to pociąg, który dodaje macierz ze swoim odbiciem⌈
sufit zwraca 1 lub 2 dla każdego elementu(3⍴240)(?3⍴256)
kolory - biały i losowy[ ]
użyj każdego elementu macierzy jako indeksu kolorów'P3',5 5 256,∊
spłaszcz i dodaj nagłówekźródło
PHP, 236 bajtów
Wiem, że to stare wyzwanie, ale po prostu lubię się rzucać.
Nie golfowany:
Przykładowe dane wyjściowe:
źródło
JavaScript ES6, 296 bajtów
Uwaga: nie tworzy pliku, rysuje na kanwie.
Zobacz to w akcji w tym skrzypce JS .
źródło