El desafío es simple: dibuja un arco iris en la menor cantidad de bytes posible
Las especificaciones para el arco iris son las siguientes:
- La figura debe tener exactamente 400 píxeles de ancho y 200 píxeles de alto (opcionalmente 401x201 si desea un solo píxel central)
- El anillo rojo debe tocar todos los bordes de la figura (radio exterior = 200 píxeles)
- Todos los anillos deben tener el mismo ancho (10 píxeles)
- El anillo violeta tendrá un radio interior de 130 píxeles.
- El arco debe ser la mitad superior de un círculo perfecto.
- El fondo debe ser blanco (también se acepta transparente)
- La figura no tendrá bordes (se hace una excepción si el borde no se puede suprimir)
- ¡Las funciones de creación de arco iris incorporadas no están permitidas!
Los siguientes colores se utilizarán en el arco iris:
Este es el código de golf, por lo que gana el código más corto en bytes.
Ejemplo:
code-golf
graphical-output
Stewie Griffin
fuente
fuente
Respuestas:
MATL ,
1079592878483 bytesEsto funciona en la versión actual (14.0.0) del lenguaje / compilador.
EDITAR (6 de julio de 2017) : ¡puede probarlo en MATL Online! .
Para verificar que los colores sean correctos, elimine los últimos cinco caracteres (debe esperar unos segundos y desplazarse hacia abajo hasta el final de la salida).
Explicación
El código tiene tres pasos principales:
Paso 1 : generar una matriz 201x401 con números de
1
a8
. Los píxeles con valor1
son el fondo (blanco), los píxeles con valores2
, ...,8
representan cada banda del arco iris.Coordenadas horizontales van desde
-200
a200
izquierda a derecha, y las coordenadas verticales se extienden de0
a200
abajo a arriba. Entonces el origen (0,0) es el centro inferior, la esquina superior izquierda es (-200,200), etc.Las diferentes bandas del arco iris se generan calculando la distancia desde cada píxel hasta el origen y cuantificando en pasos de 10 píxeles.
Paso 2 : generar una matriz de 8x3 que defina el mapa de colores. Cada fila es uno de los colores necesarios (blanco y los siete colores del arco iris). Cada valor de la matriz 201x401 anterior se interpretará como un índice de una fila de este mapa de colores.
Generamos la matriz de mapa de colores usando valores entre 0 y 1 para cada componente de color, y luego multiplicando por 255 y redondeando hacia abajo. De esta manera, la mayoría de los valores son inicialmente 0 y 1, que luego se convertirán en 0 y 255. Los valores intermedios se codifican como valores entre 0 y 1 con 2 o 3 decimales, elegidos de modo que cuando se multiplican y redondean, se obtiene el valor deseado exacto.
Paso 3 : muestra la imagen con ese mapa de colores.
fuente
Piet , 838 codeles, varios miles de píxeles
Alguien tenía que hacerlo:
Si guarda esta imagen, puede probarla en línea .
El programa real de Piet es solo el top ~ 125 píxeles, que creé usando un programa Python que escribí.
Editar esto después realmente lastimó mi visión, ¡estaré tropezando por días!
Esto genera la imagen en un formato SVG, porque SVG realmente es (en mi opinión) la forma más sencilla de hacer esto. Desvergonzadamente robé el código SVG de Doorknob. Salidas:
bueno, esto realmente:
¡Buena suerte superando esta respuesta, no usuarios de Esolang!
fuente
Pyth,
150149128 bytesSalidas en SVG:
¡Gracias a @MamaFunRoll por 16 bytes y a @PatrickRoberts por 6 más!
fuente
</svg>
etiqueta final .red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff
para la lista de colores y tomar las comillas simples descuento en todos los valores de los parámetros que no tienen espacios en ellos (cx
,cy
,r
yfill
), pero asegúrese de dejar un espacio entre el valor de llenado y el/
lo que el color no quede mal interpretado . También quite el</svg>
como se sugirió anteriormente.red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff
. Además, si reemplaza los espacios con comas,viewBox
también puede eliminar las comillas simples para ese parámetro.Minecraft 1.10 (casi), 2677 caracteres de un comando, 868 blytes
Bueno, seguro que elegí un lenguaje detallado.
Cree un nuevo mundo Superflat, pegue ese desorden en un bloque de comando Impulse, establezca una distancia de renderización bastante alta y ejecútelo. Rompa el soporte de la armadura cuando su computadora deje de retrasarse.
El resultado es de 400 bloques de ancho y 200 bloques de alto, según lo solicitado.
Solía generador de un comando de MrGarretto para empacar todo juntos, y luego modificado el resultado de que un poco para guardar un par más bytes. Aquí está la entrada:
Eso es un total de 15 1.9+ bloques de comandos y 838 bytes, por lo que 15 * 2 + 838 = 868 blytes .
Aquí está la parte (casi), le falta una esquina y un borde. Lógicamente no debería: ¿error de Minecraft? Sería exactamente 400x200 bloques si no fuera por eso. No hay mucho que pueda hacer.
fuente
Mathematica
152144126 bytesGracias @CatsAreFluffy por eliminar 8 bytes y @njpipeorgan por otros 18 :)
fuente
#
vs#[[1]]
,#2
vs#[[2]]
, y@@@
vs/@
.Thread
funciona en lugar deTranspose
.Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]
guarda otros 18 bytes, pero la idea es la misma.vim,
165142139Sí, esto es torpe. Tiene que haber mejoras que se pueden hacer.
Salidas como SVG, como mi respuesta Pyth .
¡Gracias a @MyHamDJ por reducir 3 bytes!
fuente
kv3G:norm A'/><cr>
<circle cx...
cadena en la línea 2 la primera vez, en lugar de escribir todos los colores y luego ingresarlos después.HTML + SVG + ES6, 169
fuente
height=200
y encx=200 cy=200 r=${--r}0
lugar deviewBox='0 0 40 20'
. Eso debería ahorrar 7 bytes..replace
método ...r-=1
en el código de golf ...Rubí con zapatos, 155 bytes
Salida de muestra:
fuente
JavaScript (ES6),
171158 bytesCrédito a @ edc65 por la idea de convertir
a
Puede parecer más largo, pero la cantidad de bytes guardados al comprimir la matriz en una cadena bien vale la conversión. (Ahorra 13 bytes en este caso)
Manifestación
fuente
HTML (162) + CSS (146)
HTML (224) + CSS (128)
fuente
SpecBAS -
318254 bytesSi estamos dibujando arcoíris, entonces parece un buen lugar para usar el sucesor de ZX Spectrum BASIC.
La línea 2 configura la paleta para los valores RGB específicos necesarios (y probablemente no está ayudando al recuento de bytes) ya que los colores estándar del espectro no coincidían.
El
DRAW
comando puede tomar un parámetro adicional que lo hace girar a través de variosgradosradianes entre x1, y1 y x2, y2. Finalmente encuentra una brecha en los semicírculos recién dibujados y la inundación se llena con el color actual.fuente
Tcl / Tk , 263 bytes
Por desgracia, este tipo de preguntas siempre favorece algunos lenguajes esotéricos ... Dicho esto, Tcl / Tk realmente hace que las operaciones gráficas sean: fáciles, cortas y legibles .
Dicho esto, he sacrificado la legibilidad para reducir las opciones a la menor cantidad de caracteres posible. No me imagino que agrupar la lista de colores ayudará mucho en comparación con el código para descomprimirlo ...
A modo de comparación, aquí está el código no truncado (380 bytes):
los
after
orden fue lamentablemente necesaria ya que ningún movimiento en sentido vertical (de origen de coordenadas del lienzo) se puede hacer frente a la ventana se asigna a la pantalla.Además, el código descifrado en realidad dibuja un completo arco iris (usando un círculo en lugar de un arco) y solo se basa en el recorte de la ventana ...
De todos modos, espero que lo disfruten. : O)
fuente
lmap
lugar deforeach
acortar.pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
create oval
; no golfista lo hacecreate arc
. ¿Puede usted explicar por favor?LaTeX, 290 bytes
Pruébalo aquí .
Explicaciones
fuente
Java, 354 bytes
Solo usa el
Graphics2D
clase para dibujar 7 arcos, con una matriz para almacenar los colores. Estoy seguro de que se puede mejorar aún más.Código sin golf:
fuente
0x0000ff
podría ser justo0xff
o incluso justo255
, lo mismo que0x00ff00
ser0xff00
.0xff0000
podría ser255<<16
guardar otro byte. Su ciclo podría ser guardar algunos bytes más. Puede guardar un byte más agregando un,q
a suint
declaración. Tendrías que hacerlo enint c[]=
lugar deint[] c
esoq
es unint
y no unint[]
. Hacer eso te permite agregar unq=390-v*20;
a tu bucle. y reemplazar el390-v*20
con una q. Es mucho trabajo para un byte, pero un byte es un byte, ¿verdad?drawOval
y renderizar la mitad superior de la imagen ... aunque podría ser un poco más caro ...void r()throws Exception{BufferedImage i=new BufferedImage(400,200,2);Graphics2D g=i.createGraphics();g.setStroke(new BasicStroke(10));for(int c[]={255<<16,16744192,16776960,65280,255,4915330,9371903},v=0,t;v<7;g.drawArc(t=v*10+5,t,t=390-v++*20,t,0,360))g.setColor(new Color(c[v]));ImageIO.write(i,"PNG",new File("a.png"));}}
( 325 bytes )Chicle ,
139119 bytesHexdump:
Lamentablemente, esto es más corto que mi respuesta de Pyth . :(
Genera el mismo archivo SVG.
fuente
CSS,
244242240 bytesEditar: ahorró 2 bytes al evitar un error en Chrome. Ahorró otros 2 bytes gracias a @TrangOul.
Nota: el fragmento utiliza
<div>
debido a las limitaciones de los fragmentos de pila.Mostrar fragmento de código
fuente
JavaScript
271251fuente
{ ... }
dentro de la última sección for, separados por,
. por ejfor(i=0;i<8;x.beginPath(),x.arg(...etc...))
. Probablemente también pueda usarslice
/splice
of substr si no me equivoco. También podría ser más corto para hacer el <canvas> usando.innerHTML
. O incluso una respuesta HTML + JS y dar el <canvas> y la identificación dec
y luego debería agregarse automáticamente como una variable global JSsubstr
tiene la ventaja de que su segundo parámetro es una longitud, no un desplazamiento. En cuanto al golf,document.body
parecería proporcionar un ahorro considerable.C,
220217213 bytesLa salida es PPM (el tipo binario).
Editar: guardado un par de bytes gracias a @tucuxi.
Edición 2: código reorganizado para ahorrar aún más.
fuente
i;s;t;main()
->s;t;main(i)
, y otro colocando parte de tu cuerpo de bucle for dentro de for:;)code1,code2;
->;code2)code1;
(¡guardaste una coma!).Google Blockly , 48 bloques, 75 bytes
Haga clic en el siguiente gif para navegar a la solución, donde puede ver más de cerca cómo funciona.
En cuanto a una explicación, creo que una imagen vale más que mil palabras, y por lo tanto un gif vale más que mil imágenes.
enlace a gran gif legible
Nota: No estoy seguro de cómo contar en Blockly, así que conté cada bloque como 1 byte y cada variable de la manera regular, de modo que
0
== 1 byte,530
== 3 bytes,Arial
== 5 bytes ybold
== 4 bytes.Conté el carácter especial que usé para cortar el arco iris como 2 bytes. Informe cualquier error o sugerencia del recuento de bytes en los comentarios.
fuente
Posdata (87 bytes)
Volcado hexadecimal:
Salida:
fuente
HTML + CSS,
310307 bytesMarcado no válido superdupente (puede o no parecer correcto en su navegador). Solo quería ver si era posible.
fuente
white
también podría acortarse), por supuesto, no sé por qué no vi eso. Sin embargo, intentébgcolor
antes de publicar, pero desafortunadamente ya no es compatible (de todos modos, aquí en Chrome)PHP, 285 bytes
Salidas:
fuente
header()
llamada e incluso la etiqueta PHP de apertura. En Linux, lo más simple es ejecutarlophp -r '$a=imagecreate(400,200);const b=255;for($c=[b,b,b,b,0,0,b,127,0,b,b,0,0,b,0,0,0,b,75,0,130,143,0,b,b,b,b];$i<9;)imagefilledellipse($a,200,200,$r=420-$i*20,$r,imagecolorallocate($a,$c[$j=$i++*3],$c[$j+1],$c[$j+2]));imagepng($a);' | display
desde el símbolo del sistema y contarlo como 227 caracteres. (Usando PHP 5.6.11.)Bash + ImageMagick,
159125caracteresSalida de muestra:
fuente
Procesamiento,
196186181179169163 bytesAhorré 10 bytes gracias a Kritixi Lithos
... y otros 6 bytes gracias a dzaima
fuente
for(int i=0;i<8;i++)
enfor(int i=0;i++<8;)
o similaressize()
background(-1)
es un byte más corto quebackground(255)
, y puede cambiar la255
matrizc
en-1
para guardar otro byteR,
184170 bytesHacer una imagen con dimensiones fijas de píxeles resulta ser sorprendentemente complicado con R, cuyas funciones de trazado están destinadas principalmente a los estadísticos. En particular, R deja espacio adicional para etiquetas y ejes de coordenadas a menos que establezca explícitamente los márgenes como ancho cero llamando
par
.Por otro lado, algunos de los colores requeridos (específicamente rojo, amarillo y azul) se encuentran en la paleta predeterminada y pueden referenciarse simplemente mediante índices enteros.
fuente
Cuarto Salón Haiku (184 bytes)
No puedo satisfacer las restricciones de dimensión con este formato, pero pensé que valía la pena compartirlo de todos modos.
fuente
Excel VBA,
213202196192172 BytesCódigo
Función de ventana inmediata anónima VBE que no toma entrada y genera un arco iris, como imagen vectorial, al objeto de hojas (1)
Versión de subrutina
-11 bytes para eliminar la
.Adjustments(3)=3/80
llamada y agregar un octavo arco blanco-6 bytes para usar
-1
más de&HFFFFFF
-3 bytes para usar
Sheet1
más deSheets(1)
-6 bytes para convertir una
with
declaración en unaset
declaración-14 bytes para convertir de
Sub
a anónimo función VBESalida
fuente
DIV Games Studio (184 bytes)
No es el más corto pero sí bastante simple. Utiliza la paleta predeterminada DIV
Explicación
Definir el inicio del programa (llamado "r" para ahorrar espacio)
configuración de búsqueda de paleta
COMIENCE el código del programa
Establecer el modo de video a 400,200
loop x (variable predefinida) de -80 (que bg hack) a 80 (7 colores + centro blanco)
definir restricciones de elipse
dibujar elipse: en la primera iteración esto dibuja un círculo más grande que la pantalla en blanco (índice -8)
dibujar (tipo (5 = elipse relleno), color, opacidad, x0, y0, x1, y1)
una vez hecho esto, sube x hasta cero para comenzar a dibujar la banda roja
final para loop
bucle infinito, pantalla de dibujo.
final (coincide COMIENZA en la parte superior del programa)
fuente
Perl, 175 + 1 = 176 bytes
fuente
PHP, 190 bytes
Ejecútelo así:
También funciona en teoría a 179 bytes (pero la imagen se ve un poco desordenada, mal GD):
Tampoco es una imagen perfecta, pero mucho mejor que la anterior (y @ 166 bytes):
fuente