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.
code-golf
graphical-output
jsedano
fuente
fuente
Respuestas:
MATLAB, 24 bytes
Segundo intento, ahora en realidad conforme a las reglas.
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!
fuente
Mathematica, 30 bytes
Aquí hay otro enfoque de Mathematica:
o
El primero simplemente crea una matriz
y el segundo
Luego, los
ArrayPlot
traza como una cuadrícula y, de forma predeterminada, usa escala de grises para visualizar los valores.fuente
ArrayPlot
.ArrayPlot@{Range@50}
, que es solo 20 bytes.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.
Pruébalo en línea
El resultado se ve así:
Explicación:
fuente
No line should be longer than 70 characters.
Mathematica
72 61 59 43 3534 bytesVersión actual (34 bytes)
Versión anterior (59 bytes), gracias a Martin Büttner.
Se agregaron bordes azules para resaltar la posición de los cuadrados.
Numero de cuadrados:
Primer intento (72 bytes)
Si los cuadrados pueden superponerse. Como señala Zgarb, existe una remota posibilidad de que un cuadrado oculte a otro.
fuente
Sabio -
26243529 caracteresSe parece a esto:
Intentos anteriores : primero tuve
Matrix([range(50)]).plot()
, luegomatrix_plot([range(50)])
. Estos se veían así:El usuario @flawr señaló que los cuadrados producidos con la configuración predeterminada son demasiado pequeños. Agregar una
figsize
opción lo corrige, pero es 6 caracteres más largo que la versión 5x10 en la parte superior de esta respuesta:fuente
R,
47 42 39 38 37 3635 bytesSuponiendo que se les permita superponerse, esto funciona.
Symbols
requiere 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.Gracias a todos por los comentarios y sugerencias, soy bastante nuevo en R, por lo que todo esto es muy educativo.
Versión anterior:
Imagen anterior:
fuente
symbols(x<-50:99,sq=x,bg=gray(x/99))
f = function (a, b) { a; b}
y luego llamandof(x <- 5, x)
. Esto funciona como se esperaba. Una vez que invierte los argumentos enf
la definición (yrm(x)
), ya no funciona.symbols(x,,,x<-50:99,bg=gray(x/99))
Java - 180
Bastante sencillo, solo dibujando cajas.
Con saltos de línea:
fuente
int i;
lugar de,int i=1
pero luego usar++i
en el primer uso de eni
lugar dei++
en la última ocurrencia, ahorraría 2 bytes. Por cierto: ¡ni siquiera sabía que podía hacer un programa de Java sinclass MyClass ... public static void main(...
!!!BBC BASIC, 57
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.
fuente
F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
ipython 2, 54 bytes
Lo mejor que pude hacer fue con un programa ipython. Al iniciar ipython
ipython -pylab
y ejecutar este programa, se mostrará un gráfico con 50 tonos de gris en 50 cuadrados:Salida:
Solución 2:
Aquí hay otro programa (61 bytes):
que muestra la siguiente ventana:
fuente
JavaScript (
72,70, 67 bytes)72: original (tomando prestado el
■
uso inteligente de la respuesta de Sphinxxx ):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 ...
67 bytes (65 caracteres): intercambiando la entidad por el carácter unicode:
fuente
i=51
. Si conté correctamente, ¿solo hay 49 cuadrados?for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>■')
o similar. ¡No probado pero podría funcionar!#
carácter para tener una solución larga de 70 bytes.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.C ++,
9883 caracteresBien, 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.
El uso de bibliotecas C en lugar de C ++ permite afeitar algunos caracteres.
C,
6158 caracteresEste 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
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).
fuente
int
frente de main y hacer que se compile con solo un par de advertencias con gcc.i
el primer argumento a main, como en:main(i){for(i=51;i--;)printf(...
\e
→\33
Python 2,
125115104 bytesSalida de muestra:
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
: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:
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).
Mostrar fragmento de código
fuente
J (
434140383329 caracteres)Después de las sugerencias de randomra .
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:
fuente
50
de la cabecera en la parte generada a partir de 50 * 50 plazas ahorra 1 byte:1!:2&4'P2 50 2500 ',":(,*:#i.)50
.1!:2&4'P2 ',":(,*:,],*:#i.)50
por 29 caracteres! Por cierto,plot
¿no es parte de la biblioteca J estándar?plot
es uno de los paquetes auxiliares que puede descargar desde el administrador de paquetes. Apenas lo vería como parte de la biblioteca estándar .Excel vba, 81
En la ventana inmediata:
en la hoja activa:
{81 sombras es tanto código como 50}
fuente
cells(i,j)
que necesitabasi>0
yj>0
.For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
R ,
3732 caracteres 1 :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):
Aquí hay una versión más bonita que traza los cuadrados en orden aleatorio dentro de una matriz (50 caracteres):
(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.fuente
image(matrix(1:50,5),c=gray(1:50/51))
Matlab 35 gracias a sanchises
Matlab 36
Muestra 50 cuadrados rellenos con valores grises 1 a 50 y 2 rectángulos adicionales rellenos con valores grises 0 y 51:
Matlab, 45
fuente
JavaScript, 87
90bytesEsto genera cuadrados al HTML, porque es realmente el único método de JavaScript de salida gráfica. Gracias a edc65 por reducir 3 bytes.
fuente
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)1cm
o 19mm
sería mejor y más ampliamente apoyado. Sin cambiar su conteo de bytes.PHP,
968874 bytes¡Gracias a Ismael Miguel por guardar 22 bytes!
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 °):
fuente
Matlab - 33 bytes
A pesar de los comandos detallados, el resultado sigue siendo bastante compacto. Se ve un poco mejor si reemplaza
surf
consurface
pero 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!
fuente
ndgrid
! (2 bytes menos). ¿Y cada cuadrado tiene un gris diferente ?Javascript (
7771 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:
Firefox todavía tiene la peculiaridad de hacer círculos.
(Edición pequeña: cambiado
for(i=61;i-->9;)
afor(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:
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.
fuente
<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.Piet- 2 * 103 = 206
Esto es único porque el código fuente y la salida cumplen el desafío:
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.
fuente
JavaScript: 70 bytes
fuente
font:3em a
ofont-size:3em
. Estoy rechazando este debido al tamaño de las cajas. Hasta que lo arregles.i--
lugar dei-=1
.<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.Procesamiento, 66 caracteres:
fuente
PHP (
6260 606372716259 bytes):Hice lo más corto que pude encontrar:
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 elcolor
atributo).Envíos no válidos y registro de cambios :
Antigua respuesta, con 62 bytes.
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
#111
lugar de#010101
algunos colores.Esto significaba que algunos colores se repetían.
Por lo tanto, tuve que sacrificar algunos bytes:
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!=$c
conf>$c
, que funciona perfectamente.Versión final, sin
width=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
while
bucle, así:Primera solución
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").
fuente
CSS (87 caracteres)
Utiliza animación;)
La versión ejecutable es más larga ya que Webkit todavía necesita el prefijo del proveedor. :(
Si se nos permite un
<a>
elemento aleatorio y vacío , podemos reducirlo a solo 72 caracteres:¿Ver? ¡CSS es un lenguaje de programación legítimo!
fuente
R, 36 bytes
Puedo acortar trivialmente la respuesta de freekvd.
(Perdón por no hacer un comentario bajo su solución. Stackexchange todavía no me permite hacer comentarios, votar, etc.).
fuente
PostScript, 34 bytes
En codificación ISO-Latin-1:
Este es el binario equivalente a:
(Esto supone que lo está utilizando en un dispositivo que tiene al menos 1000 puntos [= 10 pulgadas = 25.4 cm] de ancho).
fuente
0f 4e 75 a3 ...
.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 :
fuente
2htdp/image
ahtdp/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!for/set
:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
C # - 173
Usando LINQPAD
Ampliado :
Salida :
fuente
for(int i=0;i<250;i+=5)
y luegoFromArgb(i,i,i)
yRectangle(i*4,0,20,20)
da 168FillRectangle()
tiene una sobrecarga que toma las coordenadas del rectángulo directamente, por lo que puede eliminarnew Rectangle()
y salirse con 153JavaScript, 152 bytes.
Bien, quizás esta no sea la mejor solución, pero aquí está la mía.
Aquí está la salida con flotador css a la izquierda (solo para que sea más fácil contar los cuadrados) y sin:
fuente
var
palabras clave y eliminando espacios en blanco innecesarios. Además, incluya el nombre del idioma y el recuento de bytes en su respuesta.var
palabras clave.c+=5
lugar dec=c+5
. Además, puede guardar 2 caracteres colocandon=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()
px
la altura y el ancho.