Pięćdziesiąt odcieni szarości


92

Chłopcy i dziewczęta są podekscytowani widząc Pięćdziesiąt twarzy Greya na srebrnym ekranie, chcemy po prostu kodować bez kłopotów, więc oto wyzwanie, aby wybrać nasz mózg.

Musisz:

  • Wydruk na ekranie pięćdziesiąt kwadratów wypełnionych każdym innym odcieniem szarości
  • Jeśli wybrany język nie ma możliwości przetwarzania obrazu , możesz wydrukować plik obrazu
  • Kwadraty muszą być widoczne, co najmniej 20 x 20 pikseli
  • Nie możesz używać liczb losowych, chyba że upewnisz się, że każdy odcień jest unikalny.
  • Nie można połączyć się z żadną usługą przez żadną sieć
  • Nie możesz odczytać żadnych plików w swoim programie.
  • Nie możesz używać żadnych bibliotek ze standardowych bibliotek wybranego języka.

To jest golf golfowy, więc wygrywa najkrótszy kod.


21
Czy nam przeszkadzali?
Hobby Calvina

6
Sprzeciw: mylący tytuł!
George Chalhoub,

23
Czy zobaczymy przesłanie Piet ?
randomra

8
Nie te zdjęcia, które myślałem, że będziemy generować dla 50 odcieni szarości konkursu.
corsiKa

Odpowiedzi:


24

MATLAB, 24 bajty

Druga próba, teraz faktycznie zgodna z zasadami.

imshow(0:1/49:1,'I',2e3)

„I” oznacza „InitialMagnification”, ale najwyraźniej Matlab będzie automatycznie uzupełniał nazwy w parach nazwa / wartość. Pewnie to dobra sztuczka golfowa!

wprowadź opis zdjęcia tutaj


59

Mathematica, 30 bajtów

Oto inne podejście Mathematica:

ArrayPlot[#+5#2&~Array~{5,10}]

wprowadź opis zdjęcia tutaj

lub

ArrayPlot[5#+#2&~Array~{10,5}]

wprowadź opis zdjęcia tutaj

Pierwszy tworzy po prostu tablicę

{{6, 11, 16, 21, 26, 31, 36, 41, 46, 51}, 
 {7, 12, 17, 22, 27, 32, 37, 42, 47, 52}, 
 {8, 13, 18, 23, 28, 33, 38, 43, 48, 53}, 
 {9, 14, 19, 24, 29, 34, 39, 44, 49, 54}, 
 {10, 15, 20, 25, 30, 35, 40, 45, 50, 55}}

i drugi

{{6, 7, 8, 9, 10},
 {11, 12, 13, 14, 15},
 {16, 17, 18, 19, 20},
 {21, 22, 23, 24, 25},
 {26, 27, 28, 29, 30},
 {31, 32, 33, 34, 35},
 {36, 37, 38, 39, 40},
 {41, 42, 43, 44, 45},
 {46, 47, 48, 49, 50},
 {51, 52, 53, 54, 55}}

Następnie ArrayPlotdrukuje je jako siatkę i domyślnie używa skali szarości do wizualizacji wartości.


Cudowne użycie ArrayPlot.
DavidC

4
To zabawne, MatrixPlot wydaje się domyślnie używać kolorów, ma szczęście w tym wyzwaniu, że ArrayPlot używa skali szarości i jest o jedną literę krótszy niż MatrixPlot.
Omar

Możesz zrobić ArrayPlot@{Range@50}, czyli tylko 20 bajtów.
Chip Hurst

@ChipHurst, gdy to robię, domyślny rozmiar jest zbyt mały, aby spełnić wymagania 20 x 20 pikseli.
Martin Ender,

36

CJam - 23 (brak rzeczywistej wydajności graficznej)

Ponieważ CJam nie potrafi (jeszcze?) Rysować na ekranie, napisałem program, który wyświetla obraz w zwykłym formacie pgm .
Zapisz dane wyjściowe w pliku o nazwie 50.pgm i otwórz za pomocą przeglądarki / edytora obrazów.

"P2"1e3K51_,1>K*$K*~]N*

Wypróbuj online

Wynik wygląda następująco:

50.png

Wyjaśnienie:

"P2"     push "P2" (netpbm magic number)
1e3K     push 1000 and K=20 (image size)
51       push 51 (value of white)
_,       duplicate 51 and convert to an array [0 1 2 ... 50]
1>       remove 0 (slice from 1)
K*       repeat the array 20 times
$        sort, to get [(20 1's) (20 2's) ... (20 50's)]
K*       repeat the array 20 times
~        dump the elements on the stack
]        put everything from the stack in an array
N*       join with newlines

3
Więc bycie szczęśliwym zwiększa elementy !?
Caridorc

7
@Caridorc tablic zawierających liczby, tak. I będąc smutnym, zmniejsza je: p
aditsu

Nie przestrzegasz specyfikacji PGM:No line should be longer than 70 characters.
kiwixz

@iKiWiXz zaktualizowany
aditsu

1
@ iKiWiXz Powinny, nie muszą. Linie mogą być dłuższe, ale programy generujące obrazy PGM powinny starać się, aby nie przekraczały 70 znaków.
FUZxxl,

30

Mathematica 72 61 59 43 35 34 bajtów

Aktualna wersja (34 bajty)

GrayLevel[#/50]~Style~50 &~Array~50    

grid2


Wcześniejsza wersja (59 bajtów), dzięki Martin Büttner.

Graphics[{GrayLevel[#/50],Cuboid@{#~Mod~9,#/9}}&/@Range@50]

Dodano niebieskie obramowania, aby podświetlić pozycję kwadratów.

Graphics[{EdgeForm[Blue], GrayLevel[#/50], Cuboid@{#~Mod~9, #/9}} & /@Range@50]

niebieski

Ilość kwadratów:

    Length[%[[1]]]

50


Pierwsza próba (72 bajty)

Jeśli kwadraty mogą się nakładać. Jak zauważa Zgarb, istnieje niewielkie prawdopodobieństwo, że jeden kwadrat ukryje inny.

  Graphics@Table[{GrayLevel@k,Cuboid[{0,15}~RandomReal~2]},{k,.4,.89,.01}]

wprowadź opis zdjęcia tutaj


Zgaduję, że jeden kwadrat mógłby w zasadzie całkowicie pokryć inny, tak że mniej niż 50 byłoby widocznych?
Zgarb

2
Zdecydowanie najbardziej estetyczna odpowiedź.
Dan

30

Sage - 26 24 35 29 znaków

matrix(5,10,range(50)).plot()

To wygląda tak:

5x10 odcieni szarości

Poprzednie próby : Najpierw miałem Matrix([range(50)]).plot(), potem matrix_plot([range(50)]). Te wyglądały tak:

50 twarzy Greya

Użytkownik @flawr wskazał, że kwadraty utworzone przy ustawieniach domyślnych są zbyt małe. Dodanie figsizeopcji to naprawia, ale jest o 6 znaków dłuższe niż wersja 5x10 u góry tej odpowiedzi:

matrix_plot([range(50)],figsize=20)

Wygląda na to, że 51 odcieni i kwadraty wyglądają na mniejsze niż 20 x 20 pikseli, czy są większe, gdy są produkowane przez twój program?
flawr

Nie sądzę, aby dodatkowe wyjście było zabronione, @flawr, nie zadałem sobie trudu usunięcia ramki, znaczników i liczb. Może masz rację, że kwadraty są zbyt małe, sprawdzę.
Omar,

Argh! @ flawr ma rację, kwadraty są mniejsze niż 20 na 20 pikseli.
Omar

Powiedziałbym, że należy zabronić dodatkowej wydajności. Pytanie określa „50”, a nie „50 lub więcej”.
Joe

1
Czy rozumiem poprawnie, @Joe, że nie sprzeciwiasz się ramce i liczbom poza ramką, a jedynie liczbie kwadratów? W takim przypadku po prostu zamień 50 na 49.
Omar

23

R, 47 42 39 38 37 36 35 bajtów

Zakładając, że mogą się nakładać, to działa. Symbolswymaga wektora, który utrzymuje rozmiar każdego kwadratu, a ja oszczędzam miejsce, ponownie wykorzystując ten sam wektor dla wszystkich parametrów funkcji. Największy kwadrat ma zawsze szerokość 1 cala. Przy 50:99 jako zakresie liczb całkowitych najmniejszy kwadrat będzie miał około pół cala szerokości, czyli 36 pikseli przy 72 dpi.

symbols(x,,,x<-50:99,bg=gray(x/99))

Dzięki wszystkim za komentarze i sugestie, jestem całkiem nowy w R, więc to wszystko jest bardzo pouczające.

nowy i ulepszony?

Poprzednie wersje:

symbols(x,sq=x<-50:99,bg=gray(x/99))            #36
x=50:99;symbols(x,sq=x,bg=gray(x/99))           #37
x<-50:99;symbols(x,sq=x,bg=gray(x/99))          #38
x<-1:50;symbols(x,sq=x/x,bg=gray(x/50))         #39
x<-1:50/50;symbols(x,sq=x/x,bg=rgb(x,x,x))      #42
x<-1:50/50;symbols(x,squares=x/x,bg=rgb(x,x,x)) #47

Poprzednie zdjęcie: 50 odcieni R


Można zaoszczędzić jeszcze kilka zsymbols(x<-50:99,sq=x,bg=gray(x/99))
MickyT

Minus dwa! Dzięki @MickyT, myślałem, że już to zrobiono.
freekvd

1
@freekvd Zasadniczo robi to, zależy to od kolejności dostępu do argumentów wewnątrz funkcji (ponieważ argumenty są leniwie oceniane). Możesz to przetestować, f = function (a, b) { a; b}a następnie dzwoniąc f(x <- 5, x). Działa to zgodnie z oczekiwaniami. Kiedy odwrócisz argumenty w fdefinicji (i rm(x)), to już nie działa.
Konrad Rudolph

1
Wygląda na to, że ocena zaczyna się od sq = x, więc mogę przyciąć kolejny znak za pomocą tego. Dzięki @KonradRudolph
freekvd

1
Zmniejsz o 1 bajtsymbols(x,,,x<-50:99,bg=gray(x/99))
Vlo

21

Java - 180

Całkiem proste, po prostu rysowanie pól.

import java.awt.*;void f(){new Frame(){public void paint(Graphics g){for(int i=1;i<51;g.setColor(new Color(328965*i)),g.fillRect(i%8*20,i++/8*20,20,20))setSize(600,600);}}.show();}

wprowadź opis zdjęcia tutaj

Z podziałami linii:

import java.awt.*;
    void f(){
        new Frame(){
            public void paint(Graphics g){
                for(int i=1;
                    i<51;
                    g.setColor(new Color(328965*i)),
                    g.fillRect(i%8*20,i++/8*20,20,20))
                    setSize(600,600);
            }
        }.show();
    }

Jeśli ktokolwiek sprzeciwi się technicznie białemu ostatniemu polu, po prostu zmień mnożnik kolorów na 263172. Liczba takich samych bajtów, po prostu myślę, że w ten sposób wygląda lepiej.
Geobity

Myślę, że można również użyć int i;zamiast, int i=1ale następnie użyć ++iprzy pierwszym użyciu izamiast zamiast i++w ostatnim przypadku, zaoszczędziłby 2 bajty. BTW: Nawet nie wiedziałem, że możesz stworzyć program Java bez class MyClass ... public static void main(... !!!
flawr

@flawr Nie, Java nie zainicjuje zmiennych lokalnych na wartości domyślne. Może działać, jeśli przeniosę go poza funkcję. Gdybym zamiast tego dawał pełny program, spróbowałbym tego w ten sposób (to tylko funkcja plus niezbędny import). Dziękuję jednak :)
Geobits

2
@flawr Jeśli byłby to pełny program, to tak, potrzebujesz tego. To tylko funkcja , ponieważ pytanie nie określa.
Geobity

1
@AJMansfield Wiem, ale rozważam Przetwarzanie innego języka i lubię grać w golfa w Javie Java.
Geobity

17

BBC BASIC, 57

FORn=51TO2STEP-1VDU19;-1,n,n,n:RECTANGLEFILL0,0,n*20NEXT

Kwadraty muszą mieć co najmniej 20 pikseli, ale nie ma nic do powiedzenia, że ​​muszą być tego samego rozmiaru, więc myślę, że to się kwalifikuje.

Można to skrócić, stosując więcej kodów VDU niskiego poziomu. Ale zmiana z tego wzoru na mniej interesujący raczej nie spowoduje skrócenia.

wprowadź opis zdjęcia tutaj


2
Pamiętasz skróty podstawowe BBC? F., N., S., V. -> F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
SeanC

@SeanCheshire bbcbasic.co.uk/bbcwin/bbcwin.html obsługuje te skróty, nigdy nie pomyślałem o sprawdzeniu! Twoja droga liczy się jako 50. Tokenizowany rozmiar pliku to 41 bajtów (każde słowo kluczowe tokenizuje się na jeden bajt poza zakresem ASCII), chociaż często tego nie liczę. Wykorzystam jednak twoją wskazówkę w przyszłości!
Level River St

17

ipython 2, 54 bajty

Najlepsze, co mogłem zrobić, to program ipython. Uruchomienie ipython ipython -pylabi uruchomienie tego programu pokaże wykres z 50 odcieniami szarości w 50 kwadratach:

t=arange(50);c=t/50.;scatter(t%5,t,500,zip(c,c,c),'s')

Wynik:

grey50

Rozwiązanie 2:

Oto inny program (61 bajtów):

imshow(arange(50).reshape(5,10)*.02,'Greys',None,1,'nearest')

wyświetla następujące okno:

grey50b


1
Zauważ jednak, że ipython nie jest językiem i użyłeś biblioteki Python matplotlib, która jest zewnętrzną biblioteką lib.
Stefano Sanfilippo,

15

JavaScript ( 72 , 70 , 67 bajtów)

72: oryginał (pożyczenie sprytnego &#9632;użycia od odpowiedzi Sphinxxx ):

for(i=90;i>40;)document.write('<font color=#'+i+i+i--+' size=7>&#9632;')

70: kradzież bezwstydna przed Ismaelem Miguelem (który zasługuje na głosy), krótsza pętla i pozwalająca przeglądarce na poprawienie braku # kontynuowania kodu koloru ...

for(i=60;--i>9;)document.write('<font color='+i+i+i+' size=7>&#9632;')

67 bajtów (65 znaków): zamiana encji na znak Unicode:

for(i=60;--i>9;)document.write('<font color='+i+i+i+' size=7>■')


Myślę, że powinieneś zacząć od i=51. Jeśli poprawnie policzyłem, jest tylko 49 kwadratów?
flawr

1
Naprawdę podoba mi się twoja odpowiedź! Dobry Boże, dlaczego o tym nie myślałem? +1 na tym! Zredukowałbym ten for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>&#9632;')lub podobny. Nie przetestowano, ale może działać!
Ismael Miguel

1
Ponieważ kradniesz przede mną, przynajmniej kradnij właściwie. Usuń #znak, aby uzyskać rozwiązanie o długości 70 bajtów.
Ismael Miguel

1
Właśnie miałem to polecić. Domyślnie liczone są bajty, ale należy użyć znaku Unicode, ponieważ wciąż jest mniej bajtów.
NinjaBearMonkey

1
Czy pytanie brzmiało dokładnie 50 kwadratów? :) (Inne rozwiązania również rysują dodatkowe rzeczy.) Z tym i literałem Unicode, do 65 bajtów (63 znaków): for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')- ALE przynajmniej w domyślnych ustawieniach mojej przeglądarki (OSX / Chrome) pudełko jest nieco mniejsze niż 20x20 i tak piksele, więc te rozwiązania oparte na ■ są wątpliwe.
tuomassalo

13

C ++, 98 83 znaków

Ok, więc potrzebujesz emulatora terminalu, który obsługuje prawdziwe kolory. Na przykład dla Mac OS dostępne są nocne wersje iTerm2. W przypadku Uniksa konsola go obsługuje. Oto lista, na wszelki wypadek: https://gist.github.com/XVilka/8346728#now-supporting-truecolor

Kompiluj za pomocą g ++ (\ e zależy od kompilatora).

Aby kwadraty miały wystarczającą powierzchnię, musisz zmienić rozmiar czcionki terminala.

#include <cstdio>
int main(){for(int i=51;i--;)printf("\e[48;2;%i;%i;%im ",i,i,i);}

Korzystanie z bibliotek C zamiast C ++ pozwala na golenie niektórych znaków.

C, 61 58 znaków

Jest to ten sam program, ale w C, który zakłada, że ​​deklaracje typu bez typu zwracają int, i który nie wymaga uwzględnienia niektórych standardowych funkcji bibliotecznych, takich jak w tym przypadku printf. Sugerowany przez @cartographer. Trzy znaki mniej dzięki @ user3601420

main(i){for(i=51;i--;)printf("\e[48;2;%i;%i;%im ",i,i,i);}

Kompiluje z kilkoma ostrzeżeniami (dla założenia, że ​​typ zwracany przez main ma być int i domyślnie obejmuje deklarację printf).


2
Jeśli zmienisz to na C, możesz upuścić dołączenie i intprzed main, i skompilować je za pomocą kilku ostrzeżeń za pomocą gcc.
kartograf

Tak, ale to byłby inny język. W każdym razie dołączę to, dziękuję!
rorlork

1
Możesz usunąć kilka znaków z wersji C, jeśli podasz ipierwszy argument na main, jak w:main(i){for(i=51;i--;)printf(...
Functino

Tylko jedna dodatkowa postać, aby uczynić ją standardową: \e\33
Holger

To jest golf golfowy!
rorlork

11

Python 2, 125 115 104 bajtów

from turtle import*
shape("square")
bk(500)
ht()
pu()
exec'color((xcor()/2e3+.5,)*3);stamp();fd(21);'*50

Przykładowe dane wyjściowe:

wprowadź opis zdjęcia tutaj

Dobry stary żółw. To była jedyna metoda, o której mogłem pomyśleć w Pythonie, która drukuje obrazy na ekranie przy użyciu tylko standardowych bibliotek.

Kwadratowy żółw ma po prostu 21 na 21, co jest bardzo wygodne. Można to zobaczyć, przeglądając turtle.py:

"square" : Shape("polygon", ((10,-10), (10,10), (-10,10), (-10,-10)))

Jeśli masz monitor wysokiej rozdzielczości lub nie przeszkadza ci kilka kwadratów poza ekranem, to jest to 93 bajty:

from turtle import*
shape("square")
ht()
pu()
exec'color((xcor()/2e3,)*3);stamp();fd(21);'*50

Próbny

(To demo korzysta ze Skulpt'a , dostosowując znajdujący się tutaj fragment kodu. Jest on dołączony, aby dać wyobrażenie o tym, co robi kod - musiałem zmodyfikować kilka bitów, aby go uruchomić.)


Ach, widzę jak zaktualizowałeś skulpta. Dzięki za to prawdopodobnie użyję go do aktualizacji fragmentu kodu.
ArtOfCode

11

J ( 43 41 40 38 33 29 znaków)

Po sugestiach od randomra .

1!:2&4'P2 ',":(,*:,],*:#?~)50

To rozwiązanie nie wyświetla niczego, ponieważ standardowa biblioteka J nie zawiera procedur GUI. Zamiast tego generuję obraz i zapisuję go na standardowym wyjściu. Wyjście jest losowe, dzięki czemu wszystkie odcienie są wyraźne. Oto kilka przykładowych danych wyjściowych, a obraz przekonwertowany na png i obrócony o 90 ° dla łatwiejszego oglądania:

50 twarzy Greya


Popychając 50z nagłówka do wygenerowanej strony przy użyciu 50 * 50 kwadratów oszczędza 1 bajt: 1!:2&4'P2 50 2500 ',":(,*:#i.)50.
randomra

To fajny pomysł.
FUZxxl,

Co więcej: wepchnij wszystkie liczby 1!:2&4'P2 ',":(,*:,],*:#i.)50dla 29 znaków! Btw plotnie jest częścią standardowej biblioteki J?
randomra

@randomra plotjest jednym z pakietów pomocniczych, które można pobrać z menedżera pakietów. Z trudem postrzegałbym to jako część standardowej biblioteki .
FUZxxl

10

Excel vba, 81

W bezpośrednim oknie:

for i=1 to 9:for j=1 to 9:k=i+j*10:cells(i,j).interior.color=rgb(k,k,k):next:next

na aktywnym arkuszu:

81 odcieni to tyle samo co 50 kodów

{81 odcieni to tyle samo kodu co 50}


Cóż, niektórzy interpretują „50” w ten sposób, że oznacza dokładnie 50. W takim przypadku prawdopodobnie jest o jedną więcej postać, aby uzyskać 50 = 10 * 5, niż uzyskać 81 = 9 * 9.
Omar,

@Omar, od 0 do 9 i od 1 do 5 dadzą dokładnie 50 w tej samej liczbie znaków ... Oznacza to również, że mogę również napisać kontynuację w tej samej liczbie bajtów - od 0 do 9 dwa razy
SeanC

1
Och, od 0 do 9! Myślałem, że dla cells(i,j)potrzebujących i>0i j>0.
Omar,

@Omar, cholera, masz rację. Nie mogłem użyć zera
SeanC

1
Nieco krótszy (61)For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
OldCurmudgeon

8

R ,3732 znaki 1 :

image(t(1:50),c=gray.colors(50))

Wygląda jednak na to… meh (obraz obrócony o 90 °, aby lepiej pasował do tekstu; skompresowana, oryginalna kwadratowa długość boku> 20 pikseli):

nudny

Oto ładniejsza wersja, która tworzy kwadraty w losowej kolejności w matrycy (50 znaków):

image(matrix(sample(1:50),10),c=gray.colors(50))

ekscytujący!

(I tak, trzy sąsiednie kwadraty o pozornie identycznych kolorach są w rzeczywistości trzema różnymi odcieniami szarości.)

1 Tak, kolejna odpowiedź R,i nawet najkrótszy(teraz najkrótszy dla R) - przeprosiny. Brakowało mi ładnego renderowania w R.


1
Jak naprawiłeś format obrazu?
koekenbakker

? Zasadniczo to samo, co druga wersja @ 37image(matrix(1:50,5),c=gray(1:50/51))
Vlo

@koekenbakker To nie jest naprawione, ręcznie dostosowuję okno wyjściowe. To nie jest idealne, ale kod nie wytwarzają pola dla danego okna, a drugi kod tutaj ma kwestie porównywalne.
Konrad Rudolph

8

Matlab 35 dzięki sanchises

imshow(int8(ones(20,1)*(0:.05:51)))

Matlab 36

imshow(uint8(ones(20,1)*(0:.05:51)))

Wyświetla 50 kwadratów wypełnionych szarymi wartościami od 1 do 50 i 2 dodatkowe prostokąty wypełnione szarymi wartościami 0 i 51:

wprowadź opis zdjęcia tutaj

Matlab, 45

imshow(uint8(ones(20,1)*floor(1:0.05:50.95)))

Możesz ogolić potężny 1 bajt, używając int8 zamiast uint8.
Sanchises,

rozwiązanie sanchises jest lepsze!
Memming

@Memming Zależy to od jakiejś niejasnej (nieudokumentowanej?) Funkcji, o której dowiedziałem się, próbując tego. Przyznaj
Steffenowi

@TheBestOne / JaBe: Twoja odpowiedź nie działa, ponieważ nie wyświetla kwadratów. Steffen używa int8 do zaokrąglenia około 1000 wartości do 50 kwadratów.
Sanchises

7

JavaScript, 87 90 bajtów

for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>')

To generuje kwadraty do kodu HTML, ponieważ tak naprawdę jest to jedyna metoda JavaScript do wyświetlania grafiki. Dzięki edc65 do golenia 3 bajtów.


1
Zaoszczędzić 3 bajty: for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>'). Nie można używać pojedynczych cyfr, ponieważ szarości nie byłyby unikalne (# 111 tego samego koloru co # 111111)
edc65

Możesz użyć innych jednostek. 1cmlub 1 9mmbyłoby lepsze i szerzej wspierane. Bez zmiany liczby bajtów.
Ismael Miguel

7

PHP, 96 88 74 bajtów

Dzięki Ismael Miguel za uratowanie 22 bajtów!

for($i=60;--$i>9;)echo"<p style=background:#$i$i$i;height:9mm;width:9mm>";

Zapisuje 50 <p>s przy 9 mm wysokości i szerokości (która powinna być większa niż 20 pikseli na większości ekranów), ułożonych jedna na drugiej, wszystkie z niewielką różnicą odcienia.

Wygenerowany wynik (obraz jest pomniejszony i obrócony o 90 °):

Wynik


7

Matlab - 33 bajty

surf(meshgrid(1:7)),colormap gray

Pomimo pełnych poleceń wynik jest nadal dość zwarty. To wygląda nieco lepiej, jeśli zastąpi surfsię surfacejednak, że kosztuje 3 znaki.

Jeśli nie zauważysz 50. szarego kwadratu, to dlatego, że jest on nieco większy od innych!


Użyj ndgrid! (2 bajty mniej). I czy każdy kwadrat jest inny szary?
Luis Mendo

7

JavaScript (77 71 bajtów):

Ta odpowiedź nie jest już oparta na IE11. Działa, ponieważ przeglądarka przekształca złe kody kolorów na użyteczne (dodając #do liczby).

Oto kod:

for(i=59;i-->9;)document.write("<hr color="+i+i+i+" size=20 width=20>")

Firefox nadal ma dziwactwo tworzenia kręgów.

(Mała edycja: Zmieniono for(i=61;i-->9;)na, for(i=59;i-->9;)ponieważ produkował 52 kwadraty)


Stara odpowiedź:

Opiera się to na mojej odpowiedzi PHP i używa prawie tych samych sposobów tworzenia kwadratów:

for(i=51;i--;)document.write("<hr color=rgb("+[i,i,i]+") size=20 width=20>");

Nie jest to najkrótsza odpowiedź, ale warto ją tutaj dodać.


To rozwiązanie nie jest kompatybilne z Chrome (produkuje wiele zielonych kolorów) i Firefox (ten sam wynik, ale generuje koła? OO WTH?)

Ponieważ jest to gra w golfa, dopuszczalne jest rozwiązanie działające z określoną wersją lub określonym oprogramowaniem.


2
Może to tylko ja, ale uruchomienie tego fragmentu kodu powoduje powstanie głównie zielonych i niebieskich kółek. Widzę, że @ MartinBüttner pobił mnie do tego komentarza, więc to nie tylko ja ...
MrLemon

@MrLemon Chyba chrom nie lubi RGB-. - Ale działa na IE11. Ponieważ nie próbuję tworzyć rozwiązania dla różnych przeglądarek, jest to dopuszczalne. Dodam to do odpowiedzi.
Ismael Miguel

@IsmaelMiguel To chyba w porządku. Ale dla jasności jestem teraz na FF. Potwierdza jednak, że działa na IE11.
MrLemon

@MrLemon Działa na IE11, ponieważ próbowałem w domu. W razie potrzeby mogę dostarczyć ekran do drukowania. Firefox tworzy z nim kręgi. Nie mam pojęcia, jak to zrobić. Nie ma sposobu, aby to cofnąć. Spodziewałem się, że IE będzie miał dziwactwa, a nie Firefox.
Ismael Miguel

Firefox wydaje się umieszczać półkola na końcach <hr>, prawdopodobnie, aby wyglądał bardziej gładko. Nie ma pojęcia, co dzieje się z kolorami. W każdym razie mam +1 za zaskoczenie mnie.
MrLemon

7

Piet-2 * 103 = 206

Jest to wyjątkowe, ponieważ kod źródłowy i dane wyjściowe spełniają wyzwanie:

piet

Większość z nich jest dekoracyjna, więc policzyłem tylko dwa górne rzędy, które same stoją w porządku. Wysyła ppm w skali szarości, tak jak niektóre inne.


6

JavaScript - 70 bajtów

for(i=51;i-=1;)document.write('<a style=opacity:'+i/50+'>&#9632;</a>')


6
Rozmiar pudełka jest mniejszy niż 20 pikseli
edc65

1
Następnie musisz dostosować rozmiar czcionki swojej przeglądarki;)
Sphinxxx

1
Musisz użyć font:3em alub font-size:3em. Głosuję za tym z powodu wielkości pudeł. Dopóki tego nie naprawisz.
Ismael Miguel

3
Możesz użyć i--zamiast i-=1.
flawr

1
Możesz użyć <b>tagu. Nie zmieni w żaden sposób kodu, z wyjątkiem upewnienia się, że tekst będzie czarny. Nie jest to wymagane, ale może być dobrym pomysłem.
Ismael Miguel

6

Przetwarzanie, 66 znaków:

size(1000,20);for(int i=0;i<981;i+=20){fill(i/4);rect(i,0,20,20);}

odcienie szarości w przetwarzaniu


6

PHP (62 60 63 72 71 62 59 bajtów):

Zrobiłem najkrótszy, jaki udało mi się znaleźć:

for($i=59;$i-->9;)echo"<hr color=$i$i$i size=20 width=20>";

Jest to dokładnie ten sam kod, co moja odpowiedź Javascript (71 bajtów) .

Ale TAK DUŻO krótszy!

To dziwactwo w Firefoksie: zamiast kwadratów Firefox tworzy koła ! (Idź obłęd!)
Othen niż wszystkie przeglądarek wytworzenia odpowiedniego koloru (nawet z zaginionych #na coloratrybutu).


Nieprawidłowe zgłoszenia i dziennik zmian :

Stara odpowiedź z 62 bajtami.

while($i++<51)echo"<hr color=rgb($i,$i,$i) size=20 width=20>";

Wszystkie odcienie są idealnie dopasowane.

To rozwiązanie nie będzie działać w Chrome (będzie produkować kwadraty o wielu kolorach) i Firefox (co powoduje, że koła są wyłączone. Tak, koła z <hr>! Pozioma linijka to koło w Firefoksie!).
Możesz to przetestować na IE11 i powinno być w porządku.


(po prostu usunięty z góry)

Zauważyłem coś okropnego: wyświetlał #111zamiast #010101niektórych kolorów.

Oznaczało to, że niektóre kolory się powtarzały.

Dlatego musiałem poświęcić kilka bajtów:

<?while(f>$c=dechex(65-$i++))echo"<hr color=#$c$c$c size=20 width=20>";

Odtwarza 50 odcieni w idealnej kolejności, od jaśniejszej do ciemniejszej.

Ze względu na prawidłowy punkt @ edc65 musiałem dodać width=20, aby uzyskać idealne kwadraty .

Zmniejszono jeszcze jeden bajt, zastępując f!=$cgo f>$c, co działa idealnie.


Wersja ostateczna bez width=20:

<?while(f!=$c=dechex(65-$i++))echo"<hr color=#$c$c$c size=20>";

Jest to nieprawidłowe, ponieważ wymagane jest wyprowadzanie kwadratów.
To powoduje, że odcienie stają się jaśniejsze lub ciemniejsze.


Zmniejszono 1 bajt, przełączając się na whilepętlę:

<?while($c=dechex(50-$i++))echo"<hr color=#$c$c$c size=20>";

Pierwsze rozwiązanie:

<?for($i=50;$c=dechex($i--);)echo"<hr color=#$c$c$c size=20>";

Nie ma uporządkowanych odcieni, ale istnieje 50 różnych.

Nic nie wskazuje na to, że należy je zamówić, ale wymagana jest wielkość.

Mam nadzieję, że mogę to znacznie zmniejszyć.

Możesz to przetestować na stronie http://writecodeonline.com/php/ (kliknij „Wyświetl jako HTML”).


5

CSS (87 znaków)

Wykorzystuje animację;)

:after{content:'\25A0';font:9em z;animation:g 8s steps(50)}@keyframes g{to{color:#fff}}

Wersja do uruchomienia jest dłuższa, ponieważ Webkit nadal potrzebuje prefiksu dostawcy. :(

:after{content:'\25A0';font:9em z;-webkit-animation:g 8s steps(50);animation:g 8s steps(50)}@-webkit-keyframes g{to{color:#fff}}@keyframes g{to{color:#fff}}

Jeśli otrzymamy losowy, pusty <a>element, możemy ograniczyć go do 72 znaków:

a{padding:3em;animation:g 8s steps(50)}@keyframes g{to{background:#000}}

Widzieć? CSS to prawdziwy język programowania!


4

R, 36 bajtów

Potrafię skrócić odpowiedź freekvd w trywialny sposób.

x=9:59/59;symbols(x,sq=x,bg=gray(x))

Wynik

(Przepraszam, że nie skomentowałem jego rozwiązania. Stackexchange nie pozwala mi jeszcze na komentowanie, głosowanie itp.).


Czy to nie daje 51 kwadratów?
MickyT,

Czy to sprawia, że ​​najmniejszy kwadrat ma szerokość mniejszą niż 20 pikseli? To zależy od twojej rozdzielczości, ale największy kwadrat ma 1 cal, więc obraz 72 dpi będzie miał najmniejszy kwadrat 11 pikseli.
freekvd

Chociaż jeśli osiągniesz 1:99, możesz argumentować, że 50 największych kwadratów spełnia kryteria.
freekvd

4

PostScript, 34 bajty

W kodowaniu ISO-Latin-1:

20’›‡üˆì0{’81e3’6’–10’k0ˆ                   (note, this is a Line Feed)
’c’§}’H

Jest to binarny odpowiednik:

20 setlinewidth 1020 -20 0 { dup 1e3 div setgray 10 moveto 0 10 lineto stroke } for

(Zakłada się, że używasz go na urządzeniu o szerokości co najmniej 1000 punktów [= 10 cali = 25,4 cm]).


Daj nam serię oktetów zakodowanych w systemie szesnastkowym (tj 0f 4e 75 a3 .... :) .
haneefmubarak

@ Haneefmubarak Zrobię to, muszę tylko wrócić do domu, aby móc korzystać z mojego programu do gry w golfa. (Kompaktor postscriptowy online nigdy nie wydaje się działać.)
AJMansfield

@ Haneefmubarak OK, zaktualizowano o bezpośrednią reprezentację pliku, chociaż nie jest to oktet szesnastkowy. (Dodam, że później będę mógł użyć prawdziwego programu konwertującego.)
AJMansfield

4

DrRacket - 83

Tylko w celu uruchomienia DrRacket 1 rok po „Wstępie do systematycznego projektowania programów”.

EDYCJA :

(require htdp/image)(map(λ(i)(rectangle 50 50'solid(make-color i i i)))(range 50))

Zapisz kilka znaków: przełącz z 2htdp/imagena htdp/image, zmień ciąg "solid"na symbol 'solid. Dla większych oszczędności, zmień (range 9 209 4)na (range 50): odcienie szarości są po prostu muszą być wyraźne, nie jest łatwo odróżnić dla ludzkiego oka!
Omar,

Możesz uratować kilka postaci, używając for/set:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
Alexis King

4

C # - 173

Korzystanie z LINQPAD

var b=new Bitmap(1000,20);var g=Graphics.FromImage(b);for(int i=0;i<50;i++)g.FillRectangle(new SolidBrush(Color.FromArgb(i*5,i*5,i*5)),new Rectangle(i*20,0,20,20));b.Dump();

Rozszerzony :

var b = new Bitmap(1000, 20);
var g = Graphics.FromImage(b);
for (int i = 0; i < 50; i++)
    g.FillRectangle(new SolidBrush(Color.FromArgb(i * 5, i * 5, i * 5)), new Rectangle(i * 20, 0, 20, 20));
b.Dump();

Wyjście :

wynik


Sugestia: for(int i=0;i<250;i+=5)a potem FromArgb(i,i,i)i Rectangle(i*4,0,20,20)daje 168
Thomas Weller

Ponadto FillRectangle()ma przeciążenie, które pobiera bezpośrednio współrzędne prostokąta, dzięki czemu można usunąć new Rectangle()i uciec z 153
Thomas Weller

4

JavaScript, 152 bajty.

Okej, więc może to nie jest najlepsze rozwiązanie, ale tu jest moje.

function b(a){c=document
e=c.createElement('p')
with(e.style){background="rgb("+[a,a,a]+")"
width=height="20px"}c.body.appendChild(e)
a<245&&b(a+5)}b(0)

Oto wynik z css float pozostawionym (tak, aby łatwiej było policzyć kwadraty) i bez:

z css float

bez pływaka css


2
Możesz zapisać niektóre bajty, używając jednoliterowych nazw zmiennych, varusuwając wszystkie słowa kluczowe i usuwając niepotrzebne białe znaki. Ponadto w odpowiedzi należy podać nazwę języka i liczbę bajtów.
ProgramFOX

Dzięki za wkład. Zmniejszyłem spację i dodałem liczbę bajtów, ale nie jestem pewien, co masz na myśli, mówiąc o upuszczeniu varsłów kluczowych.
Devon Taylor

Nieważne. Czuję się głupio.
Devon Taylor

Użyj c+=5zamiast c=c+5. Możesz także zapisać 2 znaki, umieszczając ponownie n=c.toString()na końcu poprzedniej linii, a następnie tę linię na końcu poprzedniej linii. Więc twoja druga linia tofunction w(){if(c<250){n=c.toString()
mbomb007

Poza tym jestem pewien, że można pominąć pxwysokość i szerokość.
mbomb007
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.