En 2015, el Aeropuerto Internacional de Portland comenzó a reemplazar su icónica alfombra . Quiero que escribas un programa para dibujar su alfombra vieja en la menor cantidad de bytes posible.
La alfombra:
Especificaciones
Aquí hay un enlace a una imagen pdf escalable de un mosaico. Su salida debe coincidir con las dimensiones relativas y la ubicación de esa imagen.
Todos los colores en su imagen final deben estar dentro de 15 de cada valor RGB en la imagen especificada. Estos se enumeran a continuación para su conveniencia.
Red Green Blue Teal: 0, 168, 142 Magenta: 168, 108, 185 Orange: 247, 58, 58 Light Blue: 90, 166, 216 Dark Blue: 0, 77, 117
Su salida debe ser de al menos 150x150 píxeles y debe ser cuadrada. Si elige generar en un formato escalable como una imagen vectorial, debe coincidir exactamente con la imagen.
Puede generar la imagen en cualquier formato de imagen preexistente.
Este es el código de golf, por lo que debe tratar de minimizar la cantidad de bytes en su código.
fuente
Respuestas:
HTML puro, 873 bytes
HTML + CSS, 625 bytes
fuente
Tikz,
725693681671 bytesPruébalo en línea!
Explicación
Una buena parte del código es un contenedor:
Esta es una ligera variación en el contenedor Tikz estándar, ya que también tiene la línea
\usepackage{xcolor}
para que podamos crear los colores correctamente.Lo primero que se hace es
line width=20,every node/.style={minimum size=20}]
establecer las líneas y los nodos para que tengan el tamaño adecuado.Una vez hecho esto, definimos los colores que utilizaremos para las distintas partes de la imagen:
Ahora que todo está configurado, pintamos el fondo de nuestro lienzo verde azulado:
(No incluiré una imagen de esto porque es solo un cuadrado verde azulado, pero incluiré imágenes de cada paso)
El primer nodo que agregamos es el nodo naranja a la izquierda del centro del lienzo.
Ahora dibujaremos los nodos azul claro y magenta. Hay 7 nodos azules y 4 nodos azules, pero podemos dibujar nodos adicionales que serán cubiertos por líneas más adelante, por lo que dibujaremos 7 de cada uno.
Ahora dibujaremos todos los grupos de 3 puntos usando un solo
\foreach
bucleAhora dibujamos la línea correcta. Esta línea será una línea simple con desplazamientos de
.35
en cada dirección para que coincida con el tamaño de un nodo.Ahora debemos dibujar las líneas y cuadrados azules oscuros en el eje x. Los dibujaremos con una línea usando un patrón de guión personalizado.
Este patrón es
[dash pattern=on20off8.5on162.5off8.5]
Esto crea un cuadrado con una cola larga y sólida. Nuestra línea comenzará desde abajo y no cubrirá 2 ciclos del patrón.Y ahora hemos terminado.
fuente
\definecolor
con laHTML
especificación (en lugar deRGB
) le permite especificar colores usando hexadecimal.archivo PNG literal,
283,234227 bytesEDITAR : Al usar el servicio de compresión de imágenes en línea https://compress-or-die.com/ , esto disminuyó otros 7 bytes.
albn @ alexhi
Los 227 bytes son el tamaño real del archivo binario carpet.png. Cuando se codifica en base64, como se muestra en el bloque citado arriba, es unos pocos bytes más (308 bytes). Encapsulando eso en un fragmento html que muestra la imagen de inmediato agregará otros pocos bytes:
HTML,
414,343, 336 bytesEditar : eliminé las comillas y el cierre> como sugirió Shaggy. También comprimió la imagen hacia abajo otros
17, 24 bytesfuente
=
y el cierre>
. Aquí hay una versión de 366 bytes en la que estaba trabajando antes de ver su respuesta:<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAACYBAMAAADq7D0SAAAAD1BMVEUAqI4ATXWobLlaptj3OjrqGXAuAAAAp0lEQVRo3u3YQQqFMAxFUbeQLbiFbsH9r8k3y8CmTiKm7b2Dwv/CgUAD4jF3TYGBRdgKmRqPCQa28gaMZ20KDGz5DQhnbQoMTG2wAcPR/ScY2HeYVw4zBQYWYDUvbRLWFS/lBxhYhM3bpXzMcWBgEVa5U70cpsDAnkf1FxcwMDAwMLBczP8DAwuwmpc2HzMFBhY8qHlp8zFTYGCdyn8GKrhOYBtjv3QDvf+Zic+8bOsAAAAASUVORK5CYII
Mathematica, 285 bytes
Más fácil de leer:
Las líneas 1–3 definen nombres cortos para funciones, la más importante de las cuales es la
s
que dibuja un cuadrado centrado en las coordenadas que recibe (realmente 3 veces sus coordenadas, para una escala adecuada). La línea 4 define una función de color usando el sistema RGB de "acceso directo" de Mathematica:RGBColor["#xyz"]
dondexyz
están los dígitos hexadecimales, significaRGBColor[{17x, 17y, 17z}]
(de modo que cada coordenada tiene 16 opciones igualmente espaciadas que van de 0 a 255). Los primeros comandos en las líneas 6–10 cambian el color actual, usando los colores de acceso directo más cercanos a los cinco colores designados (ningún valor está desactivado en más de 8 cuando redondeamos al múltiplo más cercano de 17).La línea 6 dibuja el gran cuadrado verde azulado. La línea 7 dibuja la línea de cuadrados magenta, la línea 8 dibuja la línea de cuadrados naranjas y el único cuadrado naranja. La línea 9 dibuja la línea de cuadrados azules claros. La línea 11 dibuja las tres líneas diagonales de cuadrados azules oscuros, así como el único cuadrado azul oscuro en la parte inferior. Finalmente, la línea 12 dibuja los tres rectángulos largos de color azul oscuro. La salida está abajo:
(Consejo de golf: el comando
Cuboid
, que está diseñado para objetos gráficos en 3D, funciona bien en 2d y es más corto queRectangle
).fuente
Python, 420
fuente
HTML / SVG,
550542521 bytesfuente
HTML, 366 bytes
El domingo obtuve una respuesta de Base64 mientras todavía estaba trabajando en esto; si elige usarlo, eliminaré esta respuesta.
Si la cadena Base64 en sí misma es una respuesta válida, entonces eso es solo 335 bytes:
fuente
HTML / SVG + JavaScript (ES6),
500499 bytesSe
>
requiere un extra para que esto funcione como un fragmento, consulte este violín para obtener el código real.Explicación
Una matriz de matrices está enlazada con la función
a
, la creación de clones de larect
en el HTML, la inserción de ellos después de la inicialrect
y establecer susfill
,x
,y
,width
yheight
atributos. Cada matriz contiene valores para esos atributos, en ese orden, con los valores predeterminados establecidos por los parámetros predeterminados dea
. Lo aparentemente innecesarior.id++
permite el usocloneNode()
mientras se asegura que solo haya 1rect
con unaid
de c; Esto ahorra la necesidad de utilizar el ridículamente carodocument.createElementNS("http://www.w3.org/2000/svg","rect")
.fuente
PHP + SVG, 425 bytes
expandido
El resultado del código en un fragmento de HTML
PHP + SVG, 375 bytes
Este recuento de bytes se puede alcanzar al comprimir el SVG
fuente