Esta es una variación quine .
Introducción
Todos escribimos código corto, porque algunas razones oscuras , pero hagas lo que hagamos, ocuparán al menos 144 píxeles / byte (con una fuente de 12px). Pero, ¿qué pasaría si codificamos nuestro código en imágenes? Esta es tu tarea hoy.
Desafío
Su tarea es leer su propio código fuente (se permiten las citas incorrectas, por ejemplo, leer literalmente el archivo fuente) y crear una imagen a partir de él, configurando los componentes rojo, verde y azul de un píxel basado en el ASCII valor del personaje.
Ejemplo:
Tenemos la cadena "¡Hola mundo!"
Hello world!
Vamos a convertir esto a valores ASCII:
72 101 108 108 111 32 119 111 114 108 100 33
Asigne los valores RGB (si la longitud del código fuente no es divisible por 3, use 0 como caracteres restantes):
__________________________________________________
| R | G | B || R | G | B || R | G | B || R | G | B |
----------------------------------------------------
|72 |101|108||108|111|32 ||119|111|114||108|100|33 |
----------------------------------------------------
Luego creamos la imagen con el área más pequeña fuera de ella. Tenemos 4 conjuntos de valores RGB, por lo que la imagen más pequeña será una imagen 2 * 2, que va desde el píxel superior izquierdo a la derecha:
Y obtenemos esta imagen terriblemente coloreada (redimensionada, por lo que es al menos visible, también demuestra el hecho de cuán pequeña puede ser)
Reglas / Información adicional
- No hay entrada
- El resultado debe ser como un archivo separado o en una ventana separada.
- Para caracteres multibyte, divida el carácter en 2 bytes.
- El código fuente debe tener al menos 1 byte de longitud
- La imagen debe ser de los tamaños posibles, que tiene la relación ancho / altura más cercana a 1
- El recuento de píxeles en la imagen debe ser exactamente ceil (byte count / 3), no se deben agregar píxeles adicionales
Puntuación
Este es un código de golf , por lo que gana la respuesta más pequeña en bytes.
fuente
height = N
ywidth = 1
? Creo que te refieres al ancho / alto más cercano a 1.Respuestas:
En realidad, 12 bytes
Pruébalo en línea!
Este programa también funciona en serio.
Este programa genera una imagen PPM , que es aceptable por defecto .
Imagen de salida (aumentada 50x):
Explicación:
fuente
MATLAB,
817269 bytesEsto crea una función anónima que se puede pegar en la ventana de comandos y ejecutar con
ans()
. Cuando se ejecuta, esto crea una imagen de 23 píxeles (primo), por lo tanto, la representación más cuadrada es una simple matriz de píxeles.Explicación
Cuando se pega en la ventana de comandos, la función anónima se asignará automáticamente a la variable
ans
. Luego, desde la función anónima, usamos:que evalúa
char(ans)
dentro del espacio de nombres de la ventana de comandos en lugar de dentro del espacio de nombres local de la función anónima. Por lo tanto, puede convertir la función anónima en una representación de cadena.Luego tenemos las siguientes operaciones que son más sencillas:
fuente
ans
idea!ans
tiene hasta que se complete la primera ejecución, lo que resulta enans
la función en sí. La segunda vez, está usando el código "propio" (bueno, en realidad, es el código de una función anónima separada pero idéntica). Dicho esto, no conozco MATLAB, así que puedo estar equivocado.evalin
para llamarchar(ans)
en el espacio de trabajo base. Elevalin
solo se evalúa en tiempo de ejecución, por lo que, aunqueans
no está definido cuando lo pega en la ventana de comandos, cuando llamaans()
para ejecutar esta función anónima,ans
está definido y laevalin
llamada dentro de la función anónima puede acceder a él. Por lo tanto, no tiene que ejecutarlo dos veces. Si pudiera confiar en que se ejecute dos veces,evalin('base', 'char(ans)')
sería reemplazado por simplementechar(ans)
Javascript (ES6)
324312309 BytesEstoy seguro de que esto se podría jugar un poco:
Nuevas líneas de legibilidad:
Salida
fuente
f=()=>{
Aquí, simplementef=_=>
, -1 byte, simplemente no lo use, javascript está mal escritoJavascript ES6 - 216 bytes
Sin golf:
Nota:
f
devuelve un lienzo.Ejemplo de ejecución (se supone que hay
<body>
que agregar):Debería volcar la siguiente imagen en la página (ampliada):
fuente
PowerShell v4, 64 bytes
Obtiene el contenido de su propio nombre de archivo, convierte la cadena como una matriz de caracteres, agrega un encabezado PPM y establece el contenido en a.ppm como salida. 64 bytes lo hacen 11x2 píxeles:
fuente
Node.js, 63 bytes
Emite la imagen en un archivo llamado
P6
que está en formato PPM (P6).Aquí hay una representación PNG (7x3 píxeles):
fuente
PHP, 226 bytes
Golfed
Versión sin golf
Ingrese este script en un archivo llamado 'p.php' y ejecútelo. Necesita su propio método para ejecutar script PHP, ya que esto se lee desde un archivo local.
Imagen de salida:
fuente
Caracteres Java 511
La longitud de la solución conduce a una imagen más grande que es genial, porque estas imágenes son realmente agradables.
¡Tenga en cuenta que hay una nueva línea invisible al final! Lee el archivo fuente, que debe ser "Q.java" y crea una imagen "Q.png" que se ve así:
o escalado 100x
fuente
APL (Dyalog) , 33 bytes
Requiere
⎕IO←0
cuál es el predeterminado en muchos sistemas. Además, AutoFormat debe estar desactivado para preservar el programa exactamente como se indica.Hex B9 BA FD 4E 50 55 54 BB F8 0D 50 0D C2 CD FD 41 56 B2 0D 03 0B 01 FF 0D C2 BB C8 FD 4E 52 0D 16 0D
Unicode 28 2282 2395 4E 50 55 54 2283 29 27 50 27 2C 2355 2395 41 56 2373 27 0D 026B 08 2363 27 2C 2283 233D 2395 4E 52 27 66 27
Crea
P
: P3 11 1 255 185 186 253 78 80 85 84 187 248 13 80 13 194 205 253 65 86 178 13 3 11 1 255 13 194 187 200 253 78 82 13 22 13Que guarda y suelta aquí para ver:
⎕NR'f'
N sado R ePresentation del programa f⊃⌽
seleccione el último elemento (línea) del primer elemento (línea)'␍ɫ␉⍣',
anteponer los cuatro caracteres (tipo de archivo, ancho, alto, máximo)⎕AV⍳
encontrar los índices correspondientes en el A Tomic V ector (el conjunto de caracteres⍕
formatear como texto'P',
anteponer una carta(
...)
aplique la siguiente función tácita:⊂
tomar todo el argumento [y en un]⎕NPUT
N ative [archivo,] Pon [it, con un nombre de archivo que consiste en]⊃
el primer caracter ("P")fuente
Python, 81 bytes
La salida está en formato PPM.
Así es como se ve la imagen:
Ampliado:
fuente
q
P6
formato, no necesita convertir a ordinales. Además, para RGB de 8 bits, se255
debe utilizar en lugar de256
.q
una vez, como parece, elimine la asignación y sustitúyala directamente, le ahorrará tres bytes.print'P3\n9 3 256 '+' '.join(map(lambda x:str(ord(x)),open(__file__).read()))
. ¡Son -4 bytes, aunque!