¡lo mismo!
La tarea de hoy es simple: escribir un programa o una función que muestre el pequeño Mario Sprite inactivo, de Super Mario Bros, en NES, sobre un fondo azul.
Cualquier tipo de entrada es válida siempre que muestre esos 12 * 16 píxeles en cualquier lugar de la pantalla / ventana / navegador.
(EDITAR: la imagen mostrada se puede ampliar si su idioma no puede hacer pixel art. También puede generar imágenes ASCII o HTML, pero utilizando los colores correctos).
Imagen (zoom 400%):
Debes usar los siguientes colores:
- azul: # 6B8CFF
- rojo: # B13425
- verde / marrón: # 6A6B04
- naranja: # E39D25
¡El programa más corto (en número de personajes) gana!
Se aplican las lagunas estándar (especialmente, no se permite la conexión de red), pero se permite codificar y mostrar un archivo de imagen en su programa. (las entradas que usan este truco se clasificarán por separado)
¡Aquí vamos!
Tabla de clasificación actual
Respuesta más corta usando solo código:
- Mathematica, 141. https://codegolf.stackexchange.com/a/39916/10732 (por Martin Büttner)
- Bash, 158. https://codegolf.stackexchange.com/a/40002/10732 (por hpsMouse)
- ...
Respuesta más corta usando algún tipo de imagen codificada:
- HTML, 102b. https://codegolf.stackexchange.com/a/39923/10732 (por xem y NiettheDarkAbsol)
- PHP, 131b. https://codegolf.stackexchange.com/a/39926/10732 (por NiettheDarkAbsol)
- ...
Respuestas:
HTML / JS,
206158153102102
Truco utilizado: guarde el archivo GIF comprimido como un archivo HTML y agregue <img src = #> al final
Gracias a esta entrada: https://codegolf.stackexchange.com/a/39926/10732 por @NiettheDarkAbsol
Demostración: http://meuziere.free.fr/mario/gif.html
Versiones mas antiguas:
153
Truco utilizado: guarde el archivo PNG comprimido como un archivo HTML y agregue <img src = #> al final
158
Truco utilizado: establecer el dataURI recortado de un PNG comprimido como SRC de una etiqueta IMG y empaquetar todo en caracteres Unicode.
Ejecute eso en su consola JS:
206
Sin embalaje (206b):
Manifestación
Herramientas utilizadas:
fuente
Mathematica,
412292252212163148143141 caracteresEsto utiliza la notación de intercalación
^A
para el carácter de control en el punto de código1
. En Mathematica, en realidad puedo incrustar el personaje literalmente, aunque eso lleva a todo tipo de fealdad al copiar cosas. De todos modos, lo anterior es 2 caracteres más corto que mi versión anterior, y obtuve esos caracteres usando base-4 en lugar de base-5 para codificar los índices de la paleta de colores. En este momento no puedo molestarme en arreglar la explicación y la captura de pantalla a continuación, así que te dejo aquí con la versión original de base 5 de mi respuesta:Estoy codificando los píxeles en caracteres Unicode (¡sí, para contar por caracteres!).
Así es como se ve en Mathematica:
Así es como funciona:
Primero definimos una función
f
que convierte las cadenas Unicode (pasadas como el primer argumento#
) en listas de enteros. Primero obtenemos los códigos de caracteres. Esos pueden interpretarse como dígitos de un número base 65536. Y luego convertimos ese número a otra base, pasado como el segundo argumento#2
.Ahora hagamos eso para la cadena Unicode más larga.
ToCharacterCode
produce esta lista:Tratando esto como base 65536:
Y convirtiendo a base 5:
Esos son los índices de color de los píxeles, en orden azul, rojo, verde, naranja. Los usamos para indexar en esa lista de números, que es la paleta de colores.
Ahora para la paleta de colores. Eso es
"넴╫賿橫ӣ鴥"
. Usamos los índices anteriores para seleccionar la cadena correcta. Luego aplicamos nuestra función nuevamente, pero usando la base 256. Eso produce una lista de 12 enteros:Usamos la
;;
indexación de rango para extraer el corte relevante para el color actual.Por último, solo usamos
Partition
para dividir esto en filas12
y alimentarloImage
. Voilà!Editar: con el paquete Unicode, el RLE ya no valía la pena. Eliminarlo salvó 50 caracteres.
Editar: Por supuesto, sin RLE, tampoco hay necesidad de ir a la base 16.
Editar: Y mientras estamos en eso, ¿por qué no también Unicode-pack la paleta de colores? (Tengo el presentimiento de que puedo ahorrar un poco más al hacer que toda la paleta de colores también sea una sola cadena y usarla
Partition
allí también. Lo intentaré más adelante).Editar: Sí, eso eliminó otros 5 bytes.
fuente
Java:
398377Simplemente dibuja el sprite desempacando un int para cada columna. Se muestra en un programa completo:
Captura de pantalla obligatoria:
fuente
import java.awt.*
.Código de máquina x86, 102 bytes
Cómo funciona: la imagen se almacena como una imagen de 2 bits utilizando una paleta. Cada fila de la imagen se almacena como 3 bytes, seguido de un 1 byte de la paleta de colores. Esto permite que los datos se carguen como un solo DWORD. Los doce píxeles se emiten enmascarando los 2 bits más bajos del valor, escribiéndolos en la memoria de video y luego desplazando a la derecha el valor completo dos bits. Una vez que se han emitido los píxeles de la fila, el byte de la paleta se escribe en la paleta VGA. Cuando la imagen termina de dibujar, el programa entra en un bucle infinito.
Código de ensamblaje para generar el binario:
Ampliación de imagen.
Salida de muestra:
fuente
GIF - 93 bytes
La codificación de la imagen parece estar bien ahora, así que ... ¿yay? :RE
Como se ve en Notepad ++
Como PHP - 131 bytes
fuente
Bash + ImageMagick:
350331321 caracteres(Paleta robada descaradamente de la respuesta de Martin Büttner ).
Salida de muestra:
Para inspeccionarlo añadir fácilmente
-scale 120
aconvert
parámetros 's para obtener una versión a escala 10x:fuente
s/185 191 127 185 254 254/1{85,91,27,85} 254{,}/
;s/do/{/
;s/done/}/
{
..}
. Gracias, @grawity.Octo / XO-Chip , 70 bytes
Octo es un lenguaje ensamblador de alto nivel que se compila en instrucciones codificadas en bytes para la máquina virtual CHIP-8 . Octo proporciona algunas extensiones personalizadas llamadas "XO-Chip" al código de bytes CHIP-8 básico, incluida la capacidad de dibujar mapas de bits de 4 colores a través de planos de bits superpuestos.
Los bytes compilados son los siguientes:
Ejecútelo aquí en su navegador: http://johnearnest.github.io/Octo/index.html?gist=33aa37d4717a425ccd4f
Probablemente sea más esclarecedor ver el lenguaje ensamblador de Octo que produce ese bytecode:
El programa principal son tres instrucciones de dos bytes. Establezca el registro de índice de memoria
i
al comienzo del segmento de datos, seleccione el plano de dibujo 3 (3 es una máscara de bits; esto indica que desea dibujar en modo de 4 colores con ambos planos de bits) y luego dibuje un sprite en una posición x e y dada por registrarsev0
(inicializado a cero). El 0 final proporciona el tamaño del sprite, que en los conjuntos de instrucciones SuperChip y XO-Chip dibujará un sprite de 16x16. En el modo de 4 colores, un mapa de bits para el primer plano es seguido inmediatamente por un mapa de bits para el segundo plano.Para ver cómo funcionan los planos, considere este programa modificado que desplaza un plano hacia la derecha después de dibujar Mario:
Si disfruta de esto, le gustaría una de mis otras soluciones escritas con Octo. En realidad, hay un atasco de juego para el mes de octubre basado en esta herramienta.
fuente
Groovy
417386Divertido como el infierno, pero con un terrible recuento de char. GroovyFX necesita
sin golf:
fuente
grep()
en lugar detoList()
HTML / JS,
427408264256239226 caracteresObfuscatweet,
271270264256239226 caracteresUsando obfuscatweet, logré acortar esto a <250: D
El siguiente código es en qué consiste.
Truco utilizado: imagen convertida en cadena de base4 de mosaicos de color, convertida en una cadena hexadecimal. El índice de la base 4 denota color (0 = azul, 1 = ROJO, etc.) Se usa CSS con una línea en p porque los divs necesitan contenido para expandirse (también p es más corto). Debido a que CSS necesita comenzar con una letra, 'A' se antepone antes de las etiquetas CSS.
El relleno del CSS proporciona píxeles. Nada de esto usa caracteres Unicode, que de todos modos no estoy muy familiarizado, aunque probablemente iría por debajo de 300 en ese caso. La ventaja relativa de usar el relleno es que puede, como en este caso, hacer explotar la imagen al tamaño que desee que tenga cada píxel. He usado 9 píxeles, pero si gastas un personaje extra, puedes obtener hasta 99 píxeles por píxel representado.
CSS,
127119118114100130 caracteresCambiar de
p
arp
elimina la necesidad dedisplay:inline
, cuesta +1 char, -15! caracteres!Se eliminaron todos los colores y se colocaron en una matriz en caracteres JS -87. Luego simplemente eliminé todo el CSS
JS,
300289280275329325 caracteresTraté de cortar todo lo que pude de este JS simple procesando una cadena hexadecimal, pero dado que es mi primer intento, esto es lo lejos que llegué usando solo lo que sé. La escritura HTML ha sido acortada por una función que agrega etiquetas, y las clases usan el valor base 4 para determinar el color a mostrar.
Usando un acortamiento adicional, reemplazó charAt con corchetes [], eliminó la clase A0 y configuró el azul como color predeterminado para p, ahorrando 10 caracteres adicionales. El costo adicional de usar
rp
etiquetas se compensa con una gran pérdida de CSS.Compensación adicional de quitar la almohadilla de bucle while para simplemente agregar '000' para el caso de uso y cortar -12 de ella.
Se agregaron JS adicionales para los colores, luego coloque el relleno allí. Noté un error con el relleno que requiere 2 caracteres adicionales para solucionarlo. Compactado un montón de bucles
Archivo HTML,
430429419399366342 caracteresManifestación
fuente
MATLAB,
194193bytesEl código:
Y la salida:
Básicamente, convertí la imagen de Mario para que cada píxel sea un número de 2 bits. Luego codifiqué eso en la base 32, que es la cadena que se muestra en el código. Esta cadena se reforma primero para que sea 5 x 16 (cada fila (12px) de números de 2 bits se codificó en la base 32), luego se volvió a convertir en la base 10. El resultado se convierte una vez más, esta vez en la base 4 produciendo una matriz de 12x16 de Números de 2 bits. Estos números se trazan usando
imagesc()
. Luego, los colores se asignan utilizandocolormap()
un mapa de colores personalizado de los valores hexadecimales requeridos.Divertidamente, un tercio del número de bytes utilizados son solo para hacer que MATLAB establezca los colores correctos después de que se ha trazado. ¡El código de color es casi el mismo número de bytes que toda la cadena base32 !.
Sin corregir el color (eliminar la
colormap()
llamada), es de 135 bytes, y esta es la salida para el mapa de color predeterminado en MATLAB R2013a:fuente
JavaScript /
CSS/ HTML446430407353328316Jugué al golf tanto como pude y terminé con un poco de HTML / JS sucio, pero lo que sea ... funciona.
Editar : Esto es todo ... Ya terminé.
Editar Realmente hecho esta vez.
JavaScript
JSFiddle
fuente
*{line-height:1}
sería de ayuda.<div></div>
es más corto quedocument.createElement('div')
. Y a JSFiddle no le gustadocument.write
i%12?"":"<br>"
.Matlab -
449/332305bytescompresión parcial + Usando la simetría de imagen inferior
- Versión parcialmente comprimida (332 bytes):
Versión completamente sin comprimir (449 bytes):
Salida en ambos casos (obviamente ampliada en la pantalla, la real es de 12x16 píxeles):
fuente
C, 4999 bytes
Esto absolutamente no puede competir con algunas de las respuestas aquí, pero pensé que le daría una oportunidad a una respuesta C. El código es una sola línea larga, así que aquí hay un enlace pastebin. Si lo prefiere, aquí hay una codificación en base64 del código comprimido:
H4sICAzFGFYCA21hcmlvLmMA3Zc9DsIwDIXv0qndUqchkXwUurAgdYiFEEyIu4NYaZBI7PzNT3Lsz4mf408bjdPjct3odh6HVeujdgg4K4vzohCM8esdjHOpkrVoALUtIrBX8y1R04DKNCGZmTp85CVdAHifYuxO3mElIlju6xaRICOgCo4pD64PoiTzHnkZcHYnRhAYcEEpFznxB1mXP4TdS/KeVGYPZbmVaQHlnRVZFi65OkhoGodq+RHrby4xsTj8i6RmapXrPvfa0Q8ZWZY1/UPbSiC7Z2bYA7r0zla57Xmo8sOEzxdNYIXFhxMAAA==
Cabe destacar que no requiere bibliotecas externas para ejecutarse.
Requiere el terminal xterm, Konsole o GNOME, ya que utiliza la expansión RGB a los códigos de escape de color ANSI para generar los colores correctos (ANSI no define el naranja). Por razones obvias, ideone no funcionará. Se puede ejecutar en Windows con Cygwin, que usa xterm (de hecho, así es como lo probé). MSYS podría funcionar; No estoy seguro.
Salida en mi máquina (xterm):
fuente
Excel VBA,
310307295 BytesFunción de ventana inmediata anónima de VBE que genera un Mario al objeto Activesheet en las celdas
A1:L16
Sub
Rutina de ayuda aVersión sin golf
-3 bytes para eliminar espacios en blanco -12 bytes para usar
[...]
notación sobreRange(...)
notación; cambiando de colores hexadecimales a colores intSalida
fuente
Bash 346
puro golpe con VT100 como secuencias de escape (lo siento, no hay naranja en esa paleta)
fuente
Pyth, 83 bytes
Descargo de responsabilidad: este no es un candidato ganador, porque algunas de las características del lenguaje se crearon después de publicar la pregunta.
Aquí hay un volcado hexadecimal:
También puede descargar el programa aquí y ejecutarlo con
Esto crea un archivo
o.png
:Explicación:
Solo hay 4 colores diferentes, por lo tanto, solo necesito 2 bits para guardar el color de cada píxel.
fuente
Procesando 2 - 359 caracteres
Vi este desafío e inmediatamente pensé en la función pixel [] de Processing. Esperaba que fuera más corto, pero todavía estoy bastante contento con el resultado teniendo en cuenta que este es mi primer intento de golf de código.
sin golf:
puedes descargar el procesamiento aquí
fuente
Javascript 515
solo lo tengo funcionando, todavía tengo que entrar y jugar golf
fuente
div
electrónicos que forman las filas con una etiqueta que está en línea de forma predeterminada. No lo he probado, pero usara
debería funcionar. También puede usar enbackground
lugar debackground-color
.Perl - Ungolfed 927
Tendré que jugar golf más tarde. Primera vez probando
Image::Magick
.Estoy seguro de que tenemos muchos de estos, pero aquí está el mío:
fuente
Bash para imprimir:
179158 bytesInspirado por la respuesta del usuario 2485710 .
Necesita ajustar su terminal para que coincida exactamente con los colores.
fuente
-D
para decodificar y-d
de depuración .Tcl 298
Es una imagen de 2 bits por píxel en base 64. Los píxeles se asignan a códigos de escape ansi.
fuente
JavaScript: 256 caracteres (161 obfusc-a-tuiteado)
Método:
Para determinar el orden óptimo para el ciclo de color, ejecuté el algoritmo de compresión contra los datos sin procesar para cada una de las 24 permutaciones de [R, G, B, O] y seleccioné el que producía el resultado más corto (126 fue el mejor, el menos óptimo fue alrededor de 150 y tantos)
ETA descubrió esto solo después de leer las otras respuestas usando obfusca-tweet ...
Otras ideas - Pruebe el rango de datos de 3 bits 0-6, con el raro 7,8,9 ganando 4 extra cada uno: 60000N. - verifique las permutaciones del ciclo de color en todas las direcciones y velocidades que no sean horizontalmente un píxel a la vez. - pruebe múltiples pases de renderizado para que los colores se puedan superponer.
fuente
Javascript,
253240238236Obfuscatweet ed source -
253240238236No ofuscado -
395370365361Gracias a @compass por los
<p>
trucos de la etiqueta, y @xem por 2 (5) caracteres.Manifestación
Convierte datos de la base 36 y convierte a la base 4.
fuente
padding:9
nada sin una unidad después. También puede usar un elemento de una sola letra comoa
oq
que está implícitamente en línea, en lugar dep
.document.write
a la variable (deberíamos usardocument.write.bind(document)
), lo mejor que pude fue asignardocument
a la variable.JavaScript ES6 (HTML + CSS),
19930731953630Usando Obfusc-a-tweet :
Esto muestra el sprite sin usar imágenes o elementos múltiples; simplemente usa mal la
box-shadow
propiedad CSS para crear cada píxel. Pruébelo en http://jsbin.com/pozohiyezo/ . Esta versión no ofuscada tiene 307 caracteres :Esta es la versión HTML original y simple. Véalo en acción en http://jsfiddle.net/gfeLn1ey/1/ .
fuente
Javascript,
256 o245252 o 241256
Es triste anular 256, pero 245 es posible si usa caracteres no imprimibles:
Hay algún problema al enviar la solución con caracteres no imprimibles. El argumento de
btoa
tiene que ser el resultado deatob("ij6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld")
1 símbolo de longitud agregado para escapar de la barra invertida.Acorte ambas soluciones por 4 símbolos: no necesitamos nuevas para la creación de matrices.
252
241
No se necesita escapar en esta versión. El
btoa
argumento de 's es el resultado deatob("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclbaidld")
fuente
Perl,
266260257249245 bytesUtiliza un enfoque similar a la solución bash de user2485710 para escribir una salida de estilo VT100. Elimina la N explícita para nueva línea insertando una nueva línea cada 12 "vt100 píxeles", 12 * 7 = 84.
fuente
SmileBASIC,
147136 caracteresSalida (recortada):
Reemplacé todos los caracteres en las cadenas de datos con
x
's, aquí están los códigos de caracteres (en UCS-2):P$
(Paleta):FF6B,8CFF,FFB1,3425,FF6A,6B04,FFE3,D925
Datos de imagen:
0000,83F8,0A80,A3FA,8BE4,A5EA,BEA5,A55A,7EE5,0575,BFF5,0156,BFF5,0156,BBA5,0575,3AF4,A55A,3BC4,A5EA,0BC4,A3FA,0300,83F8
La paleta se almacena en una cadena, cada color (32 bits) se almacena en dos caracteres (16 bits cada uno). Los datos de la imagen (2 bits por píxel) se almacenan en otra cadena (8 píxeles por carácter).
Afortunadamente, el desafío se puntúa en caracteres, ya que este archivo es significativamente más grande si se guarda en UTF-8.
fuente
05AB1E , 87 bytes (no competidor)
Pruébalo en línea!
Salidas:
Porque 05AB1E no puede hacer colores o gráficos de ningún tipo ... Si esto no es aceptable, lo eliminaré.
fuente
Bash + 05AB1E
Sinclair BASIC - 573 bytes
OK, por lo que Spectrum no puede mostrar los colores RGB como se especifica, por lo que he usado lo más cercano posible.
La cadena es el color (1 = azul, 2 = rojo, etc.) seguido de una letra para representar cuántas veces se repite ese bloque (tomando el valor ASCII menos 96 para convertirse en 1,2,3, etc.). Un número sin letra después de que solo dibuja un bloque.
"\::"
en la línea 60 se explica cómo ingresar gráficos en un editor de texto antes de convertirlo en un archivo TAP para cargarlo en el emulador Fuse. (Se muestra como un gráfico de bloque sólido en la pantalla).Cada palabra clave es un byte en Sinclair BASIC, ha incluido un recuento de un comando PEEK después de que se generó.
fuente
Perl -
399171 bytesEscribe el archivo gif en stdout.
fuente