Cincuenta sombras de Grey


92

Los niños y las niñas están emocionados de ver Fifty Shades of Grey en la pantalla plateada, solo queremos codificar sin ser molestados, así que aquí hay un desafío para elegir nuestro cerebro.

Tienes que:

  • Imprima en la pantalla cincuenta cuadrados llenos cada uno con un tono diferente de gris
  • Si su idioma de elección carece de capacidades de procesamiento de imágenes , puede generar un archivo de imagen
  • Los cuadrados deben ser visibles, al menos 20 x 20 píxeles
  • No puede usar números aleatorios a menos que se asegure de que cada tono sea único.
  • No puede conectarse a ningún servicio a través de ninguna red.
  • No puede leer ningún archivo en su programa.
  • No puede utilizar ninguna biblioteca fuera de las bibliotecas estándar de su idioma de elección.

Este es el código de golf, por lo que el código más corto gana.


21
¿Nos estaban molestando?
Aficiones de Calvin

66
Objeción: título engañoso!
George Chalhoub

23
¿Veremos una presentación de Piet ?
randomra

8
No las imágenes que pensé que estaríamos generando para un concurso de 50 tonos de gris.
corsiKa

Respuestas:


24

MATLAB, 24 bytes

Segundo intento, ahora en realidad conforme a las reglas.

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

La 'I' significa 'InitialMagnification', pero aparentemente Matlab completará automáticamente los nombres en pares de nombre / valor. ¡Seguro que es un buen truco de golf!

ingrese la descripción de la imagen aquí


59

Mathematica, 30 bytes

Aquí hay otro enfoque de Mathematica:

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

ingrese la descripción de la imagen aquí

o

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

ingrese la descripción de la imagen aquí

El primero simplemente crea una matriz

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

y el segundo

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

Luego, los ArrayPlottraza como una cuadrícula y, de forma predeterminada, usa escala de grises para visualizar los valores.


Uso encantador de ArrayPlot.
DavidC

44
Eso es divertido, MatrixPlot parece usar colores por defecto, es una suerte para este desafío que ArrayPlot use escala de grises y es una letra más corta que MatrixPlot.
Omar

Podrías hacerlo ArrayPlot@{Range@50}, que es solo 20 bytes.
Chip Hurst

@ChipHurst cuando hago eso, el tamaño predeterminado es demasiado pequeño para cumplir con el requisito de 20x20 píxeles.
Martin Ender

36

CJam - 23 (sin salida gráfica real)

Como CJam no puede dibujar en la pantalla (¿todavía?), Escribí un programa que genera una imagen en formato pgm simple .
Guarde la salida en un archivo llamado 50.pgm y ábralo con un visor / editor de imágenes.

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

Pruébalo en línea

El resultado se ve así:

50.png

Explicación:

"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
¿Entonces ser feliz incrementa los elementos?
Caridorc

77
@ Caridorc de matrices que contienen números, sí. Y estar triste los
decreta

No sigue las especificaciones de la PGM:No line should be longer than 70 characters.
kiwixz

@iKiWiXz actualizado
aditsu

1
@iKiWiXz Debería, no debe. Las líneas pueden ser más largas que eso, pero los programas que generan imágenes PGM deberían tratar de mantenerlas con menos de 70 caracteres.
FUZxxl

30

Mathematica 72 61 59 43 35 34 bytes

Versión actual (34 bytes)

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

cuadrícula 2


Versión anterior (59 bytes), gracias a Martin Büttner.

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

Se agregaron bordes azules para resaltar la posición de los cuadrados.

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

azul

Numero de cuadrados:

    Length[%[[1]]]

50


Primer intento (72 bytes)

Si los cuadrados pueden superponerse. Como señala Zgarb, existe una remota posibilidad de que un cuadrado oculte a otro.

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

ingrese la descripción de la imagen aquí


Supongo que, en principio, un cuadrado podría cubrir otro completamente, de modo que menos de 50 serían visibles.
Zgarb

2
Definitivamente la respuesta más estéticamente agradable.
Dan

30

Sabio - 26 24 35 29 caracteres

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

Se parece a esto:

5x10 tonos de gris

Intentos anteriores : primero tuve Matrix([range(50)]).plot(), luego matrix_plot([range(50)]). Estos se veían así:

50 sombras de Grey

El usuario @flawr señaló que los cuadrados producidos con la configuración predeterminada son demasiado pequeños. Agregar una figsizeopción lo corrige, pero es 6 caracteres más largo que la versión 5x10 en la parte superior de esta respuesta:

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

Parece 51 sombras y los cuadrados parecen más pequeños que 20x20px, ¿es más grande cuando es producido por su programa?
defecto

No creo que la salida adicional esté prohibida, @flawr, tampoco me molesté en eliminar el marco, las marcas de verificación y los números. Puede que tengas razón acerca de que los cuadrados son demasiado pequeños, lo comprobaré.
Omar

Argh! @flawr tiene razón, los cuadrados son más pequeños que 20 px por 20 px.
Omar

Yo diría que la salida extra debería estar prohibida. La pregunta especifica '50', no '50 o más '.
Joe

1
¿Estoy entendiendo correctamente, @ Joe, que no te opones al marco y los números fuera del marco, solo al número de cuadrados? Si ese es el caso, simplemente reemplace 50 con 49.
Omar

23

R, 47 42 39 38 37 36 35 bytes

Suponiendo que se les permita superponerse, esto funciona. Symbolsrequiere un vector que contenga el tamaño de cada cuadrado, y estoy ahorrando espacio reutilizando el mismo vector para todos los parámetros de la función. El cuadrado más grande siempre tiene 1 pulgada de ancho. Con 50:99 como rango de enteros, el cuadrado más pequeño tendrá alrededor de media pulgada de ancho, por lo que 36 píxeles a 72 ppp.

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

Gracias a todos por los comentarios y sugerencias, soy bastante nuevo en R, por lo que todo esto es muy educativo.

¿nuevo y mejorado?

Versión anterior:

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

Imagen anterior: 50 tonos de R


Podría ahorrar un poco más consymbols(x<-50:99,sq=x,bg=gray(x/99))
MickyT

¡Menos dos! Gracias @MickyT, pensé que ya estaba hecho.
Freekvd

1
@freekvd Lo hace en general, depende del orden en el que se accede a los argumentos dentro de la función (ya que los argumentos se evalúan perezosamente). Puede probar esto teniendo f = function (a, b) { a; b}y luego llamando f(x <- 5, x). Esto funciona como se esperaba. Una vez que invierte los argumentos en fla definición (y rm(x)), ya no funciona.
Konrad Rudolph

1
Parece que la evaluación comienza en sq = x, por lo que puedo recortar otro carácter con esto. Gracias @KonradRudolph
freekvd

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

21

Java - 180

Bastante sencillo, solo dibujando cajas.

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

ingrese la descripción de la imagen aquí

Con saltos de línea:

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

Si alguien se opone a que el último cuadro sea técnicamente blanco, simplemente cambie el multiplicador de color a 263172. El mismo número de bytes, creo que se ve mejor de esta manera.
Geobits

Creo que también podría usar en int i;lugar de, int i=1pero luego usar ++ien el primer uso de en ilugar de i++en la última ocurrencia, ahorraría 2 bytes. Por cierto: ¡ni siquiera sabía que podía hacer un programa de Java sin class MyClass ... public static void main(... !!!
defecto

@flawr No, Java no inicializará las variables locales a los valores predeterminados. Podría funcionar si lo moviera fuera de la función. Si en su lugar estuviera dando un programa completo, lo intentaría de esa manera (esto es solo una función, más la importación necesaria). Gracias, aunque :)
Geobits

2
@flawr Si fuera un programa completo, entonces sí, lo necesitarías. Esto es solo una función , ya que la pregunta no especifica.
Geobits

1
@AJMansfield Lo sé, pero considero que el procesamiento es un lenguaje diferente, y me gusta jugar al golf en Java Java.
Geobits

17

BBC BASIC, 57

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

Los cuadrados deben tener al menos 20 píxeles, pero no hay nada que decir que tengan el mismo tamaño, así que supongo que esto califica.

Es posible acortar esto usando más códigos VDU de bajo nivel. Pero cambiar de este patrón a uno menos interesante es poco probable que lo acorte.

ingrese la descripción de la imagen aquí


2
¿Recuerdas tus abreviaturas de BBC Basic? 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 admite esas abreviaturas, ¡nunca pensé en comprobarlo! Su forma cuenta como 50. El tamaño de archivo tokenizado es de 41 bytes (cada palabra clave tokenizada en un solo byte fuera del rango ASCII), aunque a menudo no cuento de esa manera. Sin embargo, usaré tu consejo en el futuro.
Level River St

17

ipython 2, 54 bytes

Lo mejor que pude hacer fue con un programa ipython. Al iniciar ipython ipython -pylaby ejecutar este programa, se mostrará un gráfico con 50 tonos de gris en 50 cuadrados:

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

Salida:

grey50

Solución 2:

Aquí hay otro programa (61 bytes):

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

que muestra la siguiente ventana:

grey50b


1
Sin embargo, tenga en cuenta que ipython no es un lenguaje y lo que usó es la biblioteca de Python matplotlib, que es una biblioteca externa.
Stefano Sanfilippo

15

JavaScript ( 72 , 70 , 67 bytes)

72: original (tomando prestado el &#9632;uso inteligente de la respuesta de Sphinxxx ):

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

70: robar descaradamente a Ismael Miguel (quien merece los votos), un bucle más corto y que permite al navegador corregir por falta de # proceder con el código de color ...

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

67 bytes (65 caracteres): intercambiando la entidad por el carácter unicode:

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


Creo que deberías comenzar por i=51. Si conté correctamente, ¿solo hay 49 cuadrados?
falla

1
Realmente me gusta tu respuesta! Querido señor, ¿por qué no lo pensé? +1 en este! Reduciría este a for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>&#9632;')o similar. ¡No probado pero podría funcionar!
Ismael Miguel

1
Como me estás robando, al menos roba correctamente. Elimine el #carácter para tener una solución larga de 70 bytes.
Ismael Miguel

1
Estaba a punto de recomendar eso. El valor predeterminado es contar bytes, pero debe usar el carácter Unicode porque todavía tiene menos bytes.
NinjaBearMonkey

1
¿La pregunta decía exactamente 50 cuadrados? :) (Las otras soluciones también dibujan cosas adicionales.) Con eso y el literal unicode, hasta 65 bytes (63 caracteres): for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')- PERO al menos en la configuración predeterminada de mi navegador (OSX / Chrome) el cuadro es un poco más pequeño que 20x20 píxeles de todos modos, por lo que estas ■ soluciones basadas son cuestionables.
tuomassalo

13

C ++, 98 83 caracteres

Bien, entonces necesitarás un emulador de terminal que admita colores verdaderos. Para mac os existen las versiones nocturnas de iTerm2, por ejemplo. Para Unix, creo que Konsole lo admite. Aquí hay una lista, por si acaso: https://gist.github.com/XVilka/8346728#now-supporting-truecolor

Compilar con g ++ (\ e depende del compilador).

Para que los cuadrados tengan suficiente área, deberá cambiar el tamaño de fuente de su terminal.

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

El uso de bibliotecas C en lugar de C ++ permite afeitar algunos caracteres.

C, 61 58 caracteres

Este es el mismo programa pero en C, que supone que las declaraciones de función sin tipo devuelven int, y que no necesita incluir algunas de las funciones estándar de la biblioteca, como en este caso, printf. Sugerido por @cartographer. Tres caracteres menos gracias a @ user3601420

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

Se compila con un par de advertencias (para asumir que el tipo de retorno de main es int y para incluir implícitamente la declaración de printf).


2
Si cambia esto a C, puede soltar el include y el intfrente de main y hacer que se compile con solo un par de advertencias con gcc.
cartógrafo

Sí, pero ese sería otro idioma. De todos modos, lo agregaré, ¡gracias!
rorlork

1
Puede eliminar algunos caracteres de la versión C si realiza iel primer argumento a main, como en:main(i){for(i=51;i--;)printf(...
Functino

Solo un personaje adicional para hacerlo estándar: \e\33
Holger

Este es el código de golf!
rorlork

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

Salida de muestra:

ingrese la descripción de la imagen aquí

Buena tortuga vieja. Este fue el único método que se me ocurrió en Python que imprime imágenes en una pantalla utilizando solo las bibliotecas estándar.

La forma cuadrada de la tortuga es de 21 por 21, lo cual es muy conveniente. Esto se puede ver cavando a través de turtle.py:

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

Si tiene un monitor de alta resolución o no le importa que algunos cuadrados estén fuera de la pantalla, entonces estos son 93 bytes:

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

Manifestación

(Esta demostración utiliza Skulpt adaptando el fragmento que se encuentra aquí . Solo se incluye para dar una idea de lo que hace el código; tuve que modificar algunos bits para que funcione).


Ah, ya veo cómo te diste cuenta de que Skulpt se ha actualizado. Gracias por esto, probablemente lo usaré para actualizar el fragmento.
ArtOfCode

11

J ( 43 41 40 38 33 29 caracteres)

Después de las sugerencias de randomra .

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

Esta solución no muestra nada ya que la biblioteca estándar de J no contiene rutinas GUI. En cambio, genero una imagen y la escribo en la salida estándar. La salida es aleatoria, asegura que todos los tonos sean distintos. Aquí hay algunos resultados de muestra y la imagen convertida a png y rotada 90 ° para facilitar la visualización:

50 sombras de Gray


Empujando el 50de la cabecera en la parte generada a partir de 50 * 50 plazas ahorra 1 byte: 1!:2&4'P2 50 2500 ',":(,*:#i.)50.
randomra

Esa es una buena idea.
FUZxxl

Aún más: ¡ingrese todos los números 1!:2&4'P2 ',":(,*:,],*:#i.)50por 29 caracteres! Por cierto, plot¿no es parte de la biblioteca J estándar?
randomra

@randomra plotes uno de los paquetes auxiliares que puede descargar desde el administrador de paquetes. Apenas lo vería como parte de la biblioteca estándar .
FUZxxl

10

Excel vba, 81

En la ventana inmediata:

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

en la hoja activa:

81 sombras son tanto código como 50

{81 sombras es tanto código como 50}


Bueno, algunas personas están interpretando que "50" significa exactamente 50. En ese caso, es probable que sea un personaje más obtener 50 = 10 * 5 de lo que es obtener 81 = 9 * 9.
Omar

@Omar, 0 a 9 y 1 a 5 producirán exactamente 50 en el mismo número de caracteres ... Esto también significa que también puedo escribir la secuela, en el mismo número de bytes: de 0 a 9 dos veces
SeanC

1
¡Oh, de 0 a 9! Pensé que para lo cells(i,j)que necesitabas i>0y j>0.
Omar

@ Omar, maldición, tienes razón. No pude usar cero
SeanC

1
Ligeramente más corto (61)For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
OldCurmudgeon

8

R ,3732 caracteres 1 :

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

Sin embargo, la pantalla para esto se ve ... meh (la imagen gira 90 ° para ajustarse mejor al texto; comprimido, longitud del lado cuadrado original> 20px):

aburrido

Aquí hay una versión más bonita que traza los cuadrados en orden aleatorio dentro de una matriz (50 caracteres):

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

¡emocionante!

(Y sí, los tres cuadrados adyacentes de colores aparentemente idénticos son en realidad tres tonos de gris diferentes).

1 Sí, otra respuesta R,y ni siquiera el más corto(ahora el más corto para R) - disculpas. Me faltaba una bonita representación en R.


1
¿Cómo arreglaste la relación de aspecto?
koekenbakker

? Básicamente lo mismo que la segunda versión @ 37image(matrix(1:50,5),c=gray(1:50/51))
Vlo

@koekenbakker No está arreglado, estoy ajustando manualmente la ventana de salida. No es perfecto, pero el código hace producir cuadrados para una ventana dada, y otra código aquí tiene problemas comparables.
Konrad Rudolph

8

Matlab 35 gracias a sanchises

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

Matlab 36

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

Muestra 50 cuadrados rellenos con valores grises 1 a 50 y 2 rectángulos adicionales rellenos con valores grises 0 y 51:

ingrese la descripción de la imagen aquí

Matlab, 45

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

Puede recortar 1 byte utilizando int8 en lugar de uint8.
Sanchises

¡La solución de sanchises es mejor!
Memming

@Memming Se basa en alguna característica oscura (¿indocumentada?) Que solo descubrí probándola por el gusto de hacerlo. Dale crédito a Steffen si es debido :)
Sanchises

@TheBestOne / JaBe: Su respuesta en realidad no funciona ya que no muestra cuadrados. Steffen usa int8 para redondear los aproximadamente 1000 valores a 50 cuadrados.
Sanchises

7

JavaScript, 87 90 bytes

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

Esto genera cuadrados al HTML, porque es realmente el único método de JavaScript de salida gráfica. Gracias a edc65 por reducir 3 bytes.


1
Guardar 3 bytes: for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>'). No se pueden usar dígitos individuales porque los grises no serían únicos (# 111 del mismo color que # 111111)
edc65

Puedes usar otras unidades. 1cmo 1 9mmsería mejor y más ampliamente apoyado. Sin cambiar su conteo de bytes.
Ismael Miguel

7

PHP, 96 88 74 bytes

¡Gracias a Ismael Miguel por guardar 22 bytes!

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

Escribe 50 <p>s con 9 mm de alto y ancho (que debería ser mayor que 20px en la mayoría de las pantallas), apilados unos sobre otros, todos con una pequeña diferencia de tono.

Resultado generado (la imagen se aleja y se gira 90 °):

Resultado


7

Matlab - 33 bytes

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

A pesar de los comandos detallados, el resultado sigue siendo bastante compacto. Se ve un poco mejor si reemplaza surfcon surfacepero eso cuesta 3 caracteres.

¡Si no notas el cuadrado gris número 50, es porque es un poco más grande que los demás!


Uso ndgrid! (2 bytes menos). ¿Y cada cuadrado tiene un gris diferente ?
Luis Mendo

7

Javascript (77 71 bytes):

Esta respuesta ya no está basada en IE11. Funciona porque el navegador convierte los códigos de color incorrectos en códigos utilizables (agregando #al número).

Aquí está el código:

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

Firefox todavía tiene la peculiaridad de hacer círculos.

(Edición pequeña: cambiado for(i=61;i-->9;)a for(i=59;i-->9;)porque estaba produciendo 52 cuadrados)


Vieja respuesta:

Esto se basa en mi respuesta PHP y usa casi las mismas formas para hacer los cuadrados:

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

No es la respuesta más corta, pero vale la pena agregarla aquí.


Esta solución no es compatible con Chrome (produce múltiples colores verdes) y Firefox (mismo resultado, pero produce círculos? OO WTH?)

Como se trata de código de golf, es aceptable una solución que funcione con una versión específica o un software específico.


2
Podría ser solo yo, pero ejecutar este fragmento de código produce principalmente círculos verdes y azules. Veo que @ MartinBüttner me ganó a este comentario, así que no soy solo yo ...
MrLemon

@ MrLemon, supongo que a Chrome no le gusta RGB -.- Pero funciona en IE11. Como no estoy tratando de hacer una solución de navegador cruzado, esto es aceptable. Agregaré esto a la respuesta.
Ismael Miguel

@IsmaelMiguel Eso está bien, supongo. Pero solo por claridad, estoy en FF en este momento. Sin embargo, puede confirmar que funciona en IE11.
MrLemon

@ MrLemon Funciona en IE11, ya que lo intenté en casa. Puedo proporcionar una pantalla de impresión si es necesario. Firefox hace círculos con él. No tengo ni idea de cómo. No hay forma de revertirlo. Esperaba que IE tuviera las peculiaridades, no Firefox.
Ismael Miguel

Firefox parece poner semicírculos en los extremos de <hr>, probablemente para que se vea más suave. No tengo idea de lo que sucede con los colores. De todos modos, tengo mi +1 por desconcertarme.
MrLemon

7

Piet- 2 * 103 = 206

Esto es único porque el código fuente y la salida cumplen el desafío:

piet

La mayor parte es decorativa, así que solo conté las dos filas superiores, que están solas bien. Produce una escala de grises ppm como lo han hecho otros.


6

JavaScript: 70 bytes

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


66
El tamaño de la caja es más pequeño que 20 píxeles
edc65

1
Entonces necesita ajustar el tamaño de fuente de su navegador;)
Sphinxxx

1
Tienes que usar font:3em ao font-size:3em. Estoy rechazando este debido al tamaño de las cajas. Hasta que lo arregles.
Ismael Miguel

3
Puedes usar en i--lugar de i-=1.
falla

1
Puedes usar la <b>etiqueta. No cambiará el código de ninguna manera, excepto para asegurarse de que el texto sea negro. Esto no es un requisito, pero podría ser una buena idea.
Ismael Miguel

6

Procesamiento, 66 caracteres:

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

sombras grises en el procesamiento


6

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

Hice lo más corto que pude encontrar:

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

Este es exactamente el mismo código que mi respuesta de Javascript (con 71 bytes) .

¡Pero MUCHO más corto!

Esto tiene una peculiaridad en Firefox: ¡en lugar de cuadrados, Firefox hace círculos ! (¡Vaya locura!)
Aparte de eso, todos los navegadores producen el color correcto (incluso con los que faltan #en el coloratributo).


Envíos no válidos y registro de cambios :

Antigua respuesta, con 62 bytes.

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

Todos los tonos están perfectamente alineados.

Esta solución no funcionará para Chrome (producirá cuadrados con varios colores) y Firefox (que hace círculos oO ¡Sí, círculos con <hr>! ¡La regla horizontal es un círculo en Firefox!).
Puede probarlo en IE11 y debería estar bien.


(simplemente eliminado de arriba)

He notado algo horrible: estaba emitiendo en #111lugar de #010101algunos colores.

Esto significaba que algunos colores se repetían.

Por lo tanto, tuve que sacrificar algunos bytes:

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

Emite los 50 tonos en perfecto orden, de más claro a más oscuro.

Debido a un punto correcto hecho por @ edc65 , tuve que agregar width=20, para producir cuadrados perfectos .

Reducido un byte más al reemplazar f!=$ccon f>$c, que funciona perfectamente.


Versión final, sin width=20:

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

Esto no es válido porque se requiere para generar cuadrados.
Esto genera los tonos de más claro a más oscuro.


Se redujo 1 byte al cambiar a un whilebucle, así:

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

Primera solución

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

Esto no tiene los tonos perfectamente ordenados, pero hay 50 diferentes.

No hay nada que indique que deben ordenarse, pero hay un requisito de tamaño.

Espero poder reducirlo mucho más.

Puede probarlo en http://writecodeonline.com/php/ (haga clic en "Mostrar como HTML").


5

CSS (87 caracteres)

Utiliza animación;)

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

La versión ejecutable es más larga ya que Webkit todavía necesita el prefijo del proveedor. :(

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

Si se nos permite un <a>elemento aleatorio y vacío , podemos reducirlo a solo 72 caracteres:

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

¿Ver? ¡CSS es un lenguaje de programación legítimo!


4

R, 36 bytes

Puedo acortar trivialmente la respuesta de freekvd.

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

Salida

(Perdón por no hacer un comentario bajo su solución. Stackexchange todavía no me permite hacer comentarios, votar, etc.).


¿No produce esto 51 cuadrados?
MickyT

¿Esto hace que el cuadrado más pequeño tenga menos de 20 píxeles de ancho? Depende de su ppp, pero el cuadrado más grande es de 1 pulgada, por lo que una imagen de 72 ppp tendrá un cuadrado más pequeño de 11 píxeles.
freekvd

Aunque si lo hace 1:99, podría argumentar que los 50 cuadrados más grandes cumplen con los criterios.
Freekvd

4

PostScript, 34 bytes

En codificación ISO-Latin-1:

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

Este es el binario equivalente a:

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

(Esto supone que lo está utilizando en un dispositivo que tiene al menos 1000 puntos [= 10 pulgadas = 25.4 cm] de ancho).


Danos una serie de octetos codificados hexadecimales (es decir:) 0f 4e 75 a3 ....
haneefmubarak

@haneefmubarak Lo haré, solo necesito llegar a casa para poder usar mi programa de golfistas. (El compactador de postscript en línea nunca parece funcionar.)
AJMansfield

@haneefmubarak OK, actualizado con una representación directa del archivo, aunque no son los octetos hexadecimales. (Agregaré eso más tarde una vez que pueda usar el programa convertidor real.)
AJMansfield

4

DrRacket - 83

Solo por el hecho de activar DrRacket 1 año después de "Introducción al diseño sistemático de programas".

EDITAR :

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

Guarde un par de caracteres: cambie de 2htdp/imagea htdp/image, cambie la cadena "solid"al símbolo 'solid. Para obtener mayores ahorros, cambie (range 9 209 4)a (range 50): ¡los tonos de gris solo deben ser distintos, no fáciles de distinguir para el ojo humano!
Omar

Puede guardar algunos caracteres usando for/set:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
Alexis King

4

C # - 173

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

Ampliado :

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

Salida :

salida


Sugerencia: for(int i=0;i<250;i+=5)y luego FromArgb(i,i,i)y Rectangle(i*4,0,20,20)da 168
Thomas Weller

Además, FillRectangle()tiene una sobrecarga que toma las coordenadas del rectángulo directamente, por lo que puede eliminar new Rectangle()y salirse con 153
Thomas Weller

4

JavaScript, 152 bytes.

Bien, quizás esta no sea la mejor solución, pero aquí está la mía.

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)

Aquí está la salida con flotador css a la izquierda (solo para que sea más fácil contar los cuadrados) y sin:

con flotador css

sin flotador css


2
Puede guardar algunos bytes utilizando nombres de variables de una letra, eliminando todas las varpalabras clave y eliminando espacios en blanco innecesarios. Además, incluya el nombre del idioma y el recuento de bytes en su respuesta.
ProgramFOX

Gracias por el aporte. Reduje el espacio en blanco y agregué el recuento de bytes, pero no estoy seguro de lo que quieres decir al eliminar las varpalabras clave.
Devon Taylor

No importa. Me siento tonto.
Devon Taylor

Usar en c+=5lugar de c=c+5. Además, puede guardar 2 caracteres colocando n=c.toString()al final de la línea anterior, y luego esa línea al final de la línea anterior nuevamente. Entonces su segunda línea seríafunction w(){if(c<250){n=c.toString()
mbomb007

Además, estoy bastante seguro de que puede omitir pxla altura y el ancho.
mbomb007
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.