fünfzig Schattierungen von Grau


92

Jungen und Mädchen freuen sich, Fifty Shades of Grey auf der Leinwand zu sehen. Wir wollen einfach nur Code schreiben, ohne uns darum zu kümmern.

Sie müssen:

  • Drucken Sie auf dem Bildschirm fünfzig Quadrate, die jeweils mit einem anderen Grauton gefüllt sind
  • Wenn Ihre bevorzugte Sprache keine Bildverarbeitungsfunktionen bietet , können Sie eine Bilddatei ausgeben
  • Quadrate müssen sichtbar sein, mindestens 20 x 20 Pixel
  • Sie können keine Zufallszahlen verwenden, es sei denn, Sie stellen sicher, dass jeder Farbton einzigartig ist.
  • Sie können über kein Netzwerk eine Verbindung zu einem Dienst herstellen
  • Sie können keine Dateien in Ihrem Programm lesen.
  • Sie können keine Bibliotheken aus den Standardbibliotheken Ihrer Wahl verwenden.

Dies ist Codegolf, also gewinnt der kürzeste Code.


21
Haben sie uns gestört?
Calvins Hobbys

6
Einwand: irreführender Titel!
George Chalhoub

23
Werden wir eine Piet- Einreichung sehen?
Randomra

8
Nicht die Bilder, von denen ich dachte, dass wir sie für 50 Graustufen erstellen würden.
Corsika

Antworten:


24

MATLAB, 24 Bytes

Zweiter Versuch, nun tatsächlich regelkonform.

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

Das 'I' steht für 'InitialMagnification', aber anscheinend wird Matlab Namen in Name / Wert-Paaren automatisch vervollständigen. Klar ist ein guter Golftick!

Bildbeschreibung hier eingeben


59

Mathematica, 30 Bytes

Hier ist ein weiterer Mathematica-Ansatz:

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

Bildbeschreibung hier eingeben

oder

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

Bildbeschreibung hier eingeben

Der erste erstellt einfach ein Array

{{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}}

und der zweite

{{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}}

Dann ArrayPlotzeichnet sie als Gitter und wird standardmäßig verwendet , Graustufen , die Werte zu visualisieren.


Schöne Verwendung von ArrayPlot.
DavidC

4
Das ist lustig, MatrixPlot scheint standardmäßig Farben zu verwenden. Zum Glück verwendet ArrayPlot für diese Herausforderung Graustufen und ist einen Buchstaben kürzer als MatrixPlot.
Omar,

Das könnten Sie tun ArrayPlot@{Range@50}, das sind nur 20 Bytes.
Chip Hurst

@ChipHurst Wenn ich das tue, ist die Standardgröße zu klein, um die 20x20 Pixel-Anforderung zu erfüllen.
Martin Ender

36

CJam - 23 (keine aktuelle grafische Ausgabe)

Da CJam (noch?) Nicht auf dem Bildschirm zeichnen kann, habe ich ein Programm geschrieben, das ein Bild im normalen PGM- Format ausgibt .
Speichern Sie die Ausgabe in einer Datei mit dem Namen 50.pgm und öffnen Sie sie mit einem Bildbetrachter / -editor.

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

Probieren Sie es online aus

Das Ergebnis sieht so aus:

50.png

Erläuterung:

"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
Glücklichsein erhöht also die Elemente !?
Caridorc

7
@Caridorc von Arrays mit Zahlen, ja. Und traurig zu sein erniedrigt sie: p
aditsu

Sie halten sich nicht an die Spezifikation der PGM:No line should be longer than 70 characters.
kiwixz

@iKiWiXz aktualisiert
aditsu

1
@iKiWiXz Sollte, muss nicht. Zeilen können länger sein, aber Programme, die PGM-Bilder generieren, sollten versuchen, sie unter 70 Zeichen zu halten.
FUZxxl

30

Mathematica 72 61 59 43 35 34 Bytes

Aktuelle Version (34 Bytes)

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

Gitter 2


Frühere Version (59 Bytes), danke an Martin Büttner.

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

Blaue Ränder wurden hinzugefügt, um die Position der Quadrate hervorzuheben.

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

Blau

Anzahl der Quadrate:

    Length[%[[1]]]

50


Erster Versuch (72 Bytes)

Wenn sich die Quadrate überlappen können. Wie Zgarb bemerkt, gibt es eine entfernte Möglichkeit, dass ein Feld ein anderes verdeckt.

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

Bildbeschreibung hier eingeben


Ich vermute, dass ein Quadrat im Prinzip ein anderes vollständig abdecken könnte, sodass weniger als 50 sichtbar wären?
Zgarb,

2
Auf jeden Fall die ästhetischste Antwort.
Dan,

30

Salbei - 26 24 35 29 Zeichen

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

Es sieht aus wie das:

5x10 Graustufen

Bisherige Versuche : Erst hatte ich Matrix([range(50)]).plot()dann matrix_plot([range(50)]). Diese sahen so aus:

50 Graustufen

Benutzer @flawr wies darauf hin, dass die mit den Standardeinstellungen erstellten Quadrate zu klein sind. Das Hinzufügen von figsizeOptionen behebt das Problem, aber es ist 6 Zeichen länger als die 5x10-Version oben in dieser Antwort:

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

Sieht aus wie 51 Schattierungen und die Quadrate sehen kleiner aus als 20x20px. Ist es größer, wenn es von Ihrem Programm produziert wird?
Fehler

Ich glaube nicht, dass zusätzliche Ausgabe verboten ist, @flawr, ich habe mich auch nicht darum gekümmert, den Frame, die Tickmarks und die Zahlen zu entfernen. Sie könnten Recht haben, wenn die Quadrate zu klein sind, ich werde nachsehen.
Omar

Argh! @flawr ist richtig, die Quadrate sind kleiner als 20 x 20 Pixel.
Omar

Ich würde sagen, dass zusätzliche Ausgabe verboten werden sollte. Die Frage gibt "50" an, nicht "50 oder mehr".
Joe

1
Verstehe ich richtig, @Joe, dass Sie nichts gegen den Rahmen und die Zahlen außerhalb des Rahmens einzuwenden haben, nur gegen die Anzahl der Quadrate? Wenn dies der Fall ist, ersetzen Sie einfach 50 durch 49.
Omar

23

R, 47 42 39 38 37 36 35 Bytes

Vorausgesetzt, sie dürfen sich überlappen, funktioniert dies. Symbolserfordert einen Vektor, der die Größe für jedes Quadrat enthält, und ich spare Platz, indem ich denselben Vektor für alle Funktionsparameter wieder verwende. Das größte Quadrat ist immer 1 Zoll breit. Mit 50:99 als ganzzahligem Bereich ist das kleinste Quadrat etwa einen halben Zoll breit, also 36 Pixel bei 72 dpi.

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

Vielen Dank an alle für die Kommentare und Vorschläge, ich bin ziemlich neu in R, das ist also alles sehr lehrreich.

neu und verbessert?

Vorherige Versionen:

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

Vorheriges Bild: 50 Schattierungen von R


Könnte ein paar mehr sparen mitsymbols(x<-50:99,sq=x,bg=gray(x/99))
MickyT

Minus zwei! Danke @MickyT, ich dachte es wäre schon erledigt.
Freekvd

1
@freekvd Dies hängt im Allgemeinen von der Reihenfolge ab, in der auf die Argumente in der Funktion zugegriffen wird (da die Argumente träge ausgewertet werden). Sie können dies testen, indem Sie haben f = function (a, b) { a; b}und dann anrufen f(x <- 5, x). Das funktioniert wie erwartet. Sobald Sie die Argumente in fder Definition (und rm(x)) umkehren , funktioniert es nicht mehr.
Konrad Rudolph

1
Sieht so aus, als würde die Bewertung bei sq = x beginnen, sodass ich damit ein anderes Zeichen abschneiden kann. Thanks @KonradRudolph
freekvd

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

21

Java - 180

Ziemlich einfach, nur Kisten zeichnen.

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();}

Bildbeschreibung hier eingeben

Mit Zeilenumbrüchen:

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();
    }

Wenn jemand etwas dagegen hat, dass das letzte Kästchen technisch weiß ist, ändern Sie einfach den Farbmultiplikator auf 263172. Dieselbe Byteanzahl, ich denke nur, dass es so besser aussieht.
Geobits

Ich denke man könnte auch int i;statt verwenden int i=1aber dann ++ibeim ersten Gebrauch istatt i++beim letzten mal 2 Bytes einsparen. Übrigens: Ich wusste gar nicht, dass man ein Java-Programm ohne machen kann class MyClass ... public static void main(... !!!
Fehler

@flawr Nein, Java initialisiert lokale Variablen nicht mit Standardwerten. Es könnte funktionieren, wenn ich es außerhalb der Funktion verschiebe. Wenn ich stattdessen ein vollständiges Programm geben würde, würde ich es auf diese Weise versuchen (dies ist nur eine Funktion zuzüglich des erforderlichen Imports). Vielen Dank :)
Geobits

2
@flawr Wenn es ein volles Programm wäre, dann würden Sie das brauchen. Dies ist nur eine Funktion , da die Frage nicht spezifiziert ist.
Geobits

1
@AJMansfield Ich weiß, aber ich überlege, eine andere Sprache zu verarbeiten, und ich spiele gerne Golf in Java Java.
Geobits

17

BBC BASIC, 57

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

Die Quadrate müssen mindestens 20 Pixel groß sein, aber es gibt nichts zu sagen, dass sie die gleiche Größe haben müssen.

Es kann möglich sein, dies durch Verwendung niedrigerer VDU-Codes zu verkürzen. Ein Wechsel von diesem Muster zu einem weniger interessanten wird es jedoch wahrscheinlich nicht kürzer machen.

Bildbeschreibung hier eingeben


2
Erinnern Sie sich an Ihre BBC Basic-Abkürzungen? 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 unterstützt diese Abkürzungen, ich hätte nie gedacht, zu überprüfen! Ihr Weg zählt als 50. Die tokenisierte Dateigröße beträgt 41 Bytes (jedes Schlüsselwort ist einem einzelnen Byte außerhalb des ASCII-Bereichs zugeordnet), obwohl ich diesen Weg nicht oft zähle. Ich werde Ihren Tipp aber in Zukunft verwenden!
Level River St

17

Ipython 2, 54 Bytes

Das Beste, was ich tun konnte, war mit einem Ipython-Programm. Wenn Sie ipython mit starten ipython -pylabund dieses Programm ausführen, wird eine Grafik mit 50 Graustufen in 50 Quadraten angezeigt :

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

Ausgabe:

grey50

Lösung 2:

Hier ist ein anderes Programm (61 Bytes):

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

Daraufhin wird das folgende Fenster angezeigt:

grey50b


1
Beachten Sie jedoch, dass ipython keine Sprache ist und Sie die Python-Bibliothek matplotlib verwendet haben, eine externe Bibliothek.
Stefano Sanfilippo

15

JavaScript ( 72 , 70 , 67 Byte)

72: original (die geschickte &#9632;Verwendung von Sphinxxx's Antwort entlehnt ):

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

70: Schamlos von Ismael Miguel (der die Stimmen verdient hat) stehlen , einer kürzeren for-Schleife, und dem Browser erlauben, das Fehlen von # zu korrigieren, indem er den Farbcode einhält ...

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

67 Bytes (65 Zeichen): Vertauschen der Entität gegen das Unicode-Zeichen:

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


Ich denke, du solltest bei anfangen i=51. Wenn ich richtig gezählt habe, gibt es nur 49 Felder?
Fehler

1
Ich mag deine Antwort wirklich! Sehr geehrter Herr, warum habe ich nicht darüber nachgedacht? +1 auf diesen! Ich würde diesen auf for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>&#9632;')oder ähnlich reduzieren . Ungetestet, aber es könnte funktionieren!
Ismael Miguel

1
Da Sie von mir stehlen, stehlen Sie zumindest richtig. Entfernen Sie das #Zeichen, um eine 70 Byte lange Lösung zu erhalten.
Ismael Miguel

1
Ich wollte das nur empfehlen. Standardmäßig werden Bytes gezählt, Sie sollten jedoch das Unicode-Zeichen verwenden, da es immer noch weniger Bytes enthält.
NinjaBearMonkey

1
Hat die Frage genau 50 Felder ergeben? :) (Die anderen Lösungen zeichnen auch zusätzliches Material auf.) Mit diesem und dem Unicode-Literal bis zu 65 Bytes (63 Zeichen): for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')- ABER zumindest in den Standardeinstellungen meines Browsers (OSX / Chrome) ist die Box etwas kleiner als 20x20 Pixel sowieso, so dass diese ■ basierten Lösungen fraglich sind.
Tuomassalo

13

C ++, 98 83 Zeichen

Okay, Sie benötigen einen Terminal-Emulator, der True Colors unterstützt. Für Mac OS gibt es zum Beispiel die nächtlichen Builds von iTerm2. Für Unix glaube ich, dass Konsole es unterstützt. Hier ist eine Liste für alle Fälle: https://gist.github.com/XVilka/8346728#now-supporting-truecolor

Kompiliere mit g ++ (\ e ist compilerabhängig).

Damit die Quadrate genügend Fläche haben, müssen Sie die Schriftgröße des Terminals ändern.

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

Die Verwendung von C-Bibliotheken anstelle von C ++ ermöglicht das Rasieren einiger Zeichen.

C, 61 58 Zeichen

Dies ist dasselbe Programm, jedoch in C, das nicht typisierte Funktionsdeklarationen als Rückgabewert für int annimmt und für einige der Standardbibliotheksfunktionen, wie in diesem Fall printf, keine Includes benötigt. Vorgeschlagen von @cartographer. Drei Zeichen weniger dank @ user3601420

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

Kompiliert mit einigen Warnungen (für die Annahme, dass der Rückgabetyp von main int ist und implizit die Deklaration von printf enthält).


2
Wenn Sie dies auf C setzen, können Sie das Include und das intvor main löschen und es mit nur ein paar Warnungen mit gcc kompilieren lassen.
Kartograf

Ja, aber das wäre eine andere Sprache. Wie auch immer, ich werde es anhängen, danke!
Lorlork

1
Sie können einige Zeichen aus der C-Version entfernen, wenn Sie idas erste Argument an main stellen, wie in:main(i){for(i=51;i--;)printf(...
Functino

Nur ein zusätzlicher Charakter, um es zum Standard zu machen: \e\33
Holger

Das ist Code-Golf!
Lorlork

11

Python 2, 125 115 104 Bytes

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

Beispielausgabe:

Bildbeschreibung hier eingeben

Gute alte Schildkröte. Dies war die einzige mir in Python vorstellbare Methode, mit der Bilder nur mit den Standardbibliotheken auf einem Bildschirm gedruckt werden.

Die quadratische Schildkrötenform ist zufällig 21 mal 21, was sehr praktisch ist. Dies kann man sehen, indem man durchgräbt turtle.py:

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

Wenn Sie einen hochauflösenden Monitor haben oder nicht möchten, dass ein paar Quadrate außerhalb des Bildschirms angezeigt werden, sind dies 93 Byte:

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

Demo

(Diese Demo verwendet Skulpt, indem sie das hier gefundene Snippet anpasst . Es ist nur enthalten, um eine Vorstellung davon zu geben, was der Code tut - ich musste ein paar Bits modifizieren, damit es funktioniert.)


Ah, ich sehe, wie du realisiert hast, dass skulpt aktualisiert wurde. Vielen Dank dafür, ich werde es wahrscheinlich verwenden, um das Snippet zu aktualisieren.
ArtOfCode

11

J ( 43 41 40 38 33 29 Zeichen)

Nach Vorschlägen von randomra .

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

Diese Lösung zeigt nichts an, da die Standardbibliothek von J keine GUI-Routinen enthält. Stattdessen erstelle ich ein Bild und schreibe es in die Standardausgabe. Die Ausgabe erfolgt zufällig, es wird sichergestellt, dass alle Schattierungen unterschiedlich sind. Hier ist ein Beispiel für die Ausgabe und das in PNG konvertierte und um 90 ° gedrehte Bild zur einfacheren Anzeige:

50 Graustufen


Schieben der 50aus dem Header in den erzeugten Teil unter Verwendung von 50 * 50 Quadraten spart 1 Byte: 1!:2&4'P2 50 2500 ',":(,*:#i.)50.
Randomra

Das ist eine nette Idee.
FUZxxl

Noch mehr: Drücken Sie alle Zahlen 1!:2&4'P2 ',":(,*:,],*:#i.)50für 29 Zeichen! BTW plotist nicht Teil der Standard-J-Bibliothek?
Randomra

@randomra plotist eines der Hilfspakete, die Sie vom Paketmanager herunterladen können. Ich würde es kaum als Teil der Standardbibliothek sehen .
FUZxxl,

10

Excel vba, 81

Im unmittelbaren Fenster:

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

auf dem aktiven Blatt:

81 Shades sind genauso viel Code wie 50

{81 Shades sind genauso viel Code wie 50}


Nun, einige Leute interpretieren "50" so, dass es genau 50 bedeutet. In diesem Fall ist es wahrscheinlich ein Zeichen mehr, 50 = 10 * 5 zu erhalten, als 81 = 9 * 9.
Omar,

@Omar, 0 bis 9 und 1 bis 5 ergeben genau 50 in der gleichen Anzahl von Zeichen .... Dies bedeutet auch, dass ich die Fortsetzung auch in der gleichen Anzahl von Bytes schreiben kann - 0 bis 9 zweimal
SeanC

1
Oh, 0 bis 9! Ich dachte das brauchst cells(i,j)du i>0und j>0.
Omar

@Omar, verdammt, du hast recht. Ich konnte keine Null verwenden
SeanC

1
Etwas kürzer (61)For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
OldCurmudgeon

8

R ,3732 Zeichen 1 :

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

Die Anzeige dafür sieht jedoch so aus… meh (Bild um 90 ° gedreht, um besser in den Text zu passen; komprimiert, ursprüngliche quadratische Seitenlänge> 20px):

langweilig

Hier ist eine schönere Version, die die Quadrate in zufälliger Reihenfolge in einer Matrix (50 Zeichen) darstellt:

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

aufregend!

(Und ja, die drei benachbarten Quadrate mit scheinbar identischen Farben sind tatsächlich drei verschiedene Graustufen.)

1 Ja, eine andere R-Antwort,und nicht einmal die kürzeste(jetzt die kürzeste für R) - Entschuldigung. Mir hat ein hübsches Rendering in R gefehlt .


1
Wie haben Sie das Seitenverhältnis festgelegt?
Koekenbakker

? Grundsätzlich das gleiche wie die zweite Version @ 37image(matrix(1:50,5),c=gray(1:50/51))
Vlo

@koekenbakker Es ist nicht behoben, ich passe das Ausgabefenster manuell an. Es ist nicht perfekt , aber der Code tut Quadrate für ein bestimmtes Fenster erzeugen, und anderer Code hat hier vergleichbare Fragen.
Konrad Rudolph

8

Matlab 35 dank sanchises

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

Matlab 36

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

Zeigt 50 Quadrate mit den Grauwerten 1 bis 50 und 2 zusätzliche Rechtecke mit den Grauwerten 0 und 51 an:

Bildbeschreibung hier eingeben

Matlab, 45

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

Sie können unglaubliche 1 Byte abschneiden, indem Sie int8 anstelle von uint8 verwenden.
Sanchises

Die Lösung von sanchises ist besser!
Memming

@Memming Es hängt von einer undurchsichtigen (undokumentierten?) Funktion ab, die ich nur herausgefunden habe, als ich sie zum Teufel ausprobiert habe. Gib Steffen Kredit,
wenn

@TheBestOne / JaBe: Ihre Antwort funktioniert tatsächlich nicht, da keine Quadrate angezeigt werden. Steffen rundet die 1000er-Werte mit int8 auf 50 Felder.
Sanchises

7

JavaScript, 87 bis 90 Bytes

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

Dadurch werden Quadrate in HTML ausgegeben, da dies die einzige grafische Ausgabemethode von JavaScript ist. Danke an edc65 für das Abschneiden von 3 Bytes.


1
Sie sparen 3 Bytes: for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>'). Einzelne Ziffern können nicht verwendet werden, da Grautöne nicht eindeutig wären (# 111 dieselbe Farbe wie # 111111)
edc65

Sie können andere Einheiten verwenden. 1cmoder 1 9mmwäre besser und breiter unterstützt. Ohne die Anzahl der Bytes zu ändern.
Ismael Miguel

7

PHP, 96 88 74 Bytes

Danke an Ismael Miguel für das Speichern von 22 Bytes!

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

Schreibt 50 <p>s mit 9 mm Höhe und Breite (die auf den meisten Bildschirmen größer als 20 Pixel sein sollten), mit geringfügigen Farbunterschieden.

Generiertes Ergebnis (das Bild wird herausgezoomt und um 90 ° gedreht):

Ergebnis


7

Matlab - 33 Bytes

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

Trotz der ausführlichen Befehle ist das Ergebnis immer noch recht kompakt. Es sieht ein bisschen besser , wenn Sie ersetzen surfmit , surfaceaber das kostet 3 Zeichen.

Wenn Sie das 50. graue Quadrat nicht bemerken, ist es etwas größer als die anderen!


Verwenden Sie ndgrid! (2 Bytes weniger). Und ist jedes Quadrat ein anderes Grau?
Luis Mendo

7

Javascript (77 71 Bytes):

Diese Antwort basiert nicht mehr auf IE11. Es funktioniert, weil der Browser die falschen Farbcodes in verwendbare umwandelt (indem #er die Zahl hinzufügt ).

Hier ist der Code:

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

Firefox hat immer noch die Eigenheit, Kreise zu machen.

(Kleine Änderung: Geändert for(i=61;i-->9;)in, for(i=59;i-->9;)weil 52 Quadrate erzeugt wurden.)


Alte Antwort:

Dies basiert auf meiner PHP-Antwort und verwendet fast die gleichen Methoden, um die Quadrate zu erstellen:

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

Nicht die kürzeste Antwort, aber es lohnt sich, sie hier hinzuzufügen.


Diese Lösung ist nicht kompatibel mit Chrome (erzeugt mehrere grüne Farben) und Firefox (das gleiche Ergebnis, erzeugt aber Kreise? OO WTH?)

Da dies Code-Golf ist, ist eine Lösung, die mit einer bestimmten Version oder einer bestimmten Software arbeitet, akzeptabel.


2
Es könnte nur ich sein, aber das Ausführen dieses Code-Snippets erzeugt hauptsächlich grüne und blaue Kreise. Ich sehe, @ MartinBüttner hat mich zu diesem Kommentar geschlagen, also bin es nicht nur ich ...
MrLemon

@ MrLemon Ich denke, Chrom mag RGB nicht -.- Aber es funktioniert auf IE11. Da ich nicht versuche, eine browserübergreifende Lösung zu erstellen, ist dies akzeptabel. Ich werde dies zur Antwort hinzufügen.
Ismael Miguel

@IsmaelMiguel Das ist in Ordnung, denke ich. Aber aus Gründen der Klarheit bin ich gerade bei FF. Kann bestätigen, dass es auf IE11 funktioniert.
MrLemon

@ MrLemon Es funktioniert auf IE11, da ich zu Hause ausprobiert habe. Bei Bedarf kann ich einen Druckbildschirm zur Verfügung stellen. Firefox macht damit Kreise. Ich habe keine Ahnung, wie. Es gibt keine Möglichkeit, dies rückgängig zu machen. Ich hatte erwartet, dass IE die Macken hat, nicht Firefox.
Ismael Miguel

Firefox scheint die Enden mit einem Halbkreis zu versehen <hr>, wahrscheinlich um das Erscheinungsbild zu verbessern. Keine Ahnung, was mit den Farben passiert. Wie auch immer, ich habe meine +1 für die Verwirrung.
MrLemon

7

Piet-2 * 103 = 206

Dies ist insofern einzigartig, als der Quellcode und die Ausgabe die Herausforderung erfüllen:

Piet

Das meiste davon ist dekorativ, also habe ich nur die beiden oberen Reihen gezählt, die für sich alleine stehen. Gibt wie andere Graustufen-ppm aus.


6

JavaScript - 70 Bytes

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


6
Die Boxgröße ist kleiner als 20 Pixel
edc65 16.02.15

1
Dann müssen Sie die Schriftgröße Ihres Browsers anpassen;)
Sphinxxx

1
Sie müssen font:3em aoder verwenden font-size:3em. Ich stimme wegen der Größe der Kisten ab. Bis du reparierst.
Ismael Miguel

3
Sie können i--anstelle von verwenden i-=1.
Fehler

1
Sie können das <b>Tag verwenden. Der Code wird in keiner Weise geändert, es sei denn, der Text ist schwarz. Dies ist keine Voraussetzung, aber es könnte eine gute Idee sein.
Ismael Miguel

6

Verarbeitung, 66 Zeichen:

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

Grautöne in der Verarbeitung


6

PHP (62 60 63 72 71 62 59 Bytes):

Ich habe den kürzesten gemacht, den ich finden konnte:

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

Dies ist genau derselbe Code wie meine Javascript-Antwort (mit 71 Bytes) .

Aber so viel kürzer!

Dies hat eine Besonderheit in Firefox: Anstelle von Quadraten macht Firefox Kreise ! (Go Wahnsinn!)
Andernfalls produzieren alle Browser die richtige Farbe (auch wenn #das colorAttribut fehlt ).


Ungültige Einreichungen und Änderungsprotokoll :

Alte Antwort mit 62 Bytes.

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

Alle Farben sind perfekt aufeinander abgestimmt.

Diese Lösung funktioniert nicht für Chrome (erzeugt Quadrate mit mehreren Farben) und Firefox (wodurch Kreise oO werden Ja, Kreise mit <hr>! Das horizontale Lineal ist in Firefox ein Kreis!).
Sie können es auf IE11 testen und es sollte in Ordnung sein.


(einfach von oben entfernen)

Mir ist etwas Schreckliches aufgefallen: Es wurde #111statt #010101für einige Farben ausgegeben .

Dies bedeutete, dass sich einige Farben wiederholten.

Deshalb musste ich ein paar Bytes opfern:

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

Gibt die 50 Farben in perfekter Reihenfolge aus, von heller bis dunkler.

Aufgrund eines korrekten Punktes von @ edc65 musste ich hinzufügen width=20, um perfekte Quadrate zu erzeugen .

Reduziert ein weiteres Byte durch Ersetzen f!=$cdurch f>$c, was perfekt funktioniert.


Endfassung, ohne width=20:

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

Dies ist ungültig, da Quadrate ausgegeben werden müssen.
Dies gibt die Schatten von heller nach dunkler aus.


Reduziert 1 Byte durch Umschalten auf eine whileSchleife wie folgt:

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

Erste Lösung:

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

Dies hat nicht die Farben ordentlich bestellt, aber es gibt 50 verschiedene.

Es gibt nichts, was besagt, dass sie bestellt werden müssen, aber es gibt eine Anforderung an die Größe.

Ich hoffe, ich kann es viel mehr reduzieren.

Sie können es unter http://writecodeonline.com/php/ testen (klicken Sie auf "Als HTML anzeigen").


5

CSS (87 Zeichen)

Verwendet Animation;)

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

Die ausführbare Version ist länger, da Webkit weiterhin das Herstellerpräfix benötigt. :(

: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}}

Wenn wir ein zufälliges, leeres <a>Element zulassen , können wir es auf nur 72 Zeichen reduzieren:

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

Sehen? CSS ist eine legitime Programmiersprache!


4

R, 36 Bytes

Ich kann die Antwort von freekvd trivial verkürzen.

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

Ausgabe

(Sorry, dass ich unter seiner Lösung keinen Kommentar abgegeben habe. Stackexchange erlaubt mir noch keine Kommentare abzugeben, abzustimmen usw.).


Produziert dies nicht 51 Quadrate?
MickyT

Dies macht das kleinste Quadrat weniger als 20 Pixel breit? Es hängt von Ihrer dpi ab, aber das größte Quadrat ist 1 Zoll, so dass ein 72 dpi-Bild ein kleinstes Quadrat von 11 Pixel hat.
Freekvd

Wenn Sie es jedoch auf 1:99 schaffen, können Sie argumentieren, dass die 50 größten Quadrate die Kriterien erfüllen.
Freekvd

4

PostScript, 34 Bytes

In der ISO-Latin-1-Codierung:

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

Dies ist das binäre Äquivalent zu:

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

(Dies setzt voraus, dass Sie es auf einem Gerät verwenden, das mindestens 1000 Punkte [= 10 Zoll = 25,4 cm] breit ist.)


Geben Sie uns eine Reihe hexadezimal codierter Oktette (dh:) 0f 4e 75 a3 ....
Haneefmubarak

@haneefmubarak Ich muss nur nach Hause, damit ich mein Golfprogramm nutzen kann. (Die Online-Postscript-Komprimierung scheint nie zu funktionieren.)
AJMansfield

@haneefmubarak OK, aktualisiert mit einer direkten Darstellung der Datei, obwohl es nicht die hexadezimalen Oktette sind. (Ich werde das später hinzufügen, sobald ich das echte Konvertierungsprogramm verwenden kann.)
AJMansfield

4

DrRacket - 83

Nur um DrRacket 1 Jahr nach "Introduction to Systematic Program Design" zu starten.

EDIT :

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

Speichern Sie einige Zeichen: Wechseln Sie von 2htdp/imagezu htdp/image, und ändern Sie die Zeichenfolge "solid"in das Symbol 'solid. Für größere Einsparungen ändern Sie den Wert (range 9 209 4)auf (range 50): Die Grautöne müssen nur deutlich sein, was für das menschliche Auge nicht leicht zu erkennen ist!
Omar

Sie können ein paar Zeichen speichern, indem Sie for/set:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
Alexis King

4

C # - 173

LINQPAD verwenden

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();

Erweitert :

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();

Ausgabe :

Ausgabe


Vorschlag: for(int i=0;i<250;i+=5)und dann FromArgb(i,i,i)und Rectangle(i*4,0,20,20)gibt 168
Thomas Weller

Darüber hinaus FillRectangle()hat eine Überladung, die die Rechteckkoordinaten direkt übernimmt, so dass Sie die entfernen new Rectangle()und mit 153 davonkommen können
Thomas Weller

4

JavaScript, 152 Byte.

Okay, vielleicht ist das nicht die beste Lösung, aber hier ist meine.

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)

Hier ist die Ausgabe mit css float links (nur damit es einfacher ist, die Quadrate zu zählen) und ohne:

mit CSS Float

ohne CSS Float


2
Sie können einige Bytes sparen, indem Sie Variablennamen mit einem Buchstaben verwenden, alle varSchlüsselwörter löschen und unnötige Leerzeichen entfernen. Bitte geben Sie in Ihrer Antwort auch den Namen der Sprache und die Anzahl der Bytes an.
ProgramFOX

Danke für die Eingabe. Ich habe Leerzeichen reduziert und die Anzahl der Bytes erhöht, bin mir aber nicht sicher, was Sie mit dem Löschen der varSchlüsselwörter meinen .
Devon Taylor

Keine Ursache. Ich fühle mich dumm.
Devon Taylor

Verwenden Sie c+=5anstelle von c=c+5. Sie können auch 2 Zeichen sparen, indem Sie n=c.toString()am Ende der vorherigen Zeile und dann diese Zeile am Ende der vorherigen Zeile erneut einfügen. Also wäre deine 2. Zeilefunction w(){if(c<250){n=c.toString()
mbomb007 20.02.15

Ich bin mir auch ziemlich sicher, dass Sie pxfür die Höhe und Breite weglassen können .
mbomb007
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.