La llamada cósmica es un mensaje enviado al espacio en 1999 y 2003. Está compuesto por 23 imágenes de mapa de bits monocromas de 127 * 127px, como se detalla aquí .
Su misión es escribir un programa que muestre el mensaje completo de 127 * 2921px, ya sea como texto (hecho de ceros, unos y saltos de línea) o como una imagen (dibujada en la pantalla o guardada en el disco). Habrá dos categorías de ganadores: una para salida de texto y otra para salida de imagen.
Todos los trucos están permitidos, excepto las lagunas comunes.
Se permite imprimir las 23 páginas por separado.
Está permitido escribir hasta 23 programas (como uno para cada página) y sumar su tamaño para determinar su puntaje.
Está permitido usar hasta 23 archivos binarios junto con su (s) programa (s). Su peso se cuenta en su puntaje.
El código más corto (en byte) gana.
A 1 bit por píxel, la imagen contiene 127 * 127 * 23/8 = 46370 bytes + 7 bits de datos. (advertencia: no está permitido generar un cero adicional si almacena valores de píxeles en 46371 bytes)
Se permite una nueva línea / espacio final para la salida de texto.
La salida visual no puede contener ningún píxel negro además de los píxeles negros de la llamada cósmica. Se puede dibujar en una columna (ordenada correctamente), o dividirse en 23 imágenes, o animada (como un gif), también ordenada correctamente.
Adjunto: la salida de texto y la salida de imagen para reproducir:
0
el programa Snails vacío1
y el programa GolfScript vacío imprime una nueva línea . Alguien podría enviar una respuesta de 0 bytes y 373888 programas :)Respuestas:
GIF, 27386 bytes
Aquí están las páginas de la transmisión original divididas en marcos GIF individuales, resultó que no era tan pequeño como 1 PNG de todas ellas :(
fuente
HTML, 16012b
Comprimí la imagen en PNG8, la abrí en un editor de texto, agregué
<svg onload="document.body.innerHTML='<img src=#>'">
al final, y voilà:
Demostración: http://xem.github.io/miniCosmicCall/
NB: agregar
<img src=#>
también funciona, pero deja visible mucha basura, así que prefiero no hacerlo.PD: por diversión, también puse el mensaje completo en un solo tweet ejecutable (puede copiarlo y pegarlo en la consola del navegador y aparece la imagen):
https://twitter.com/MaximeEuziere/status/742440423994580992
fuente
Python 2.7 -
109718077 bytesactualizar:
LZMA en realidad por alguna razón no funciona para mí, así que volví a Deflate.
Encontré una herramienta en línea para comprimir el PNG aún más (dicen que usan compresión con pérdida, pero la matriz permanece sin cambios)
__main__.py
guión un poco más ...La mayoría de los algoritmos de compresión consideran los datos como una matriz unidimensional y, por lo tanto, no pueden capturar los caracteres bidimensionales repetidos que se muestran en la llamada cósmica (la OMI también dificulta que los extraterrestres entiendan también: P).
Primero, seleccioné cada personaje como una matriz de 7 * 5 e hice una lista de todos los personajes únicos (101 si recuerdo). Luego iteré sobre la imagen, y cuando se encontró un personaje, se registraron la posición y el índice de ese personaje (en la lista de personajes).
Esas posiciones podrían representarse con un solo int, sin embargo, con más de 2K caracteres encontrados, y las posiciones que van desde 0-370966 (forma divmod) requieren hasta 3 bytes cada una. Sin embargo, recolecté las posiciones de los caracteres en orden, por lo que convertí la posición absoluta en posición de desplazamiento, haciendo que la mayoría de los números sean menos de 1 byte. Codifiqué esta lista en utf-8 para tener en cuenta los pocos números que eran mayores que 1 byte
Después de grabar y eliminar todos los caracteres coincidentes, guardé el png con la máxima compresión. Luego empaqueté el script de reconstrucción de Python (revertir el mismo proceso), png, la plantilla de caracteres y la lista de posición de caracteres en un archivo zip para aprovechar el hecho de que Python puede tomar una carpeta o archivo zip como argumento, y comenzará la ejecución en cualquier archivo en el nivel superior nombrado
__main__.py
. Jugué un poco con 7z para obtener la mejor compresión, que resultó ser LZMA con palabras de 1M y 32 bits.Aquí está la secuencia de comandos del decodificador (golfed pero con comentarios todavía)
enlace para descargar el archivo zip ...fuente
Gzipbzip2
en el shell,2091418965 bytesHaga el archivo de datos de salida con la salida de texto proporcionada en la pregunta,
bzip2
y cambie el nombre del archivo as
. Esto luego permite:para hacer el trabajo. Por lo tanto, agrega hasta 18958 bytes de datos y un comando de 7 bytes.
fuente
Pyth, 46381 bytes
Por razones obvias no se puede publicar aquí.
Muestra.
Pastebin de hexdump del programa.
fuente
jc.BC""127"
).Bash + binario WebP, 11 + 15330 = 15341 bytes
Como las reglas establecen esto:
y
... No pude resistirme a publicar algo estúpidamente simple.
El programa está en bash y genera la imagen guardándola en el disco.
Utiliza 1 archivo binario, que también es un archivo de imagen (sí, WebP es un formato de imagen), por lo tanto, el programa puede hacer tan poco como ... hacer una copia de ese archivo.
Entonces, el código (11 bytes):
Suponiendo que el binario complementario se llama "b", el código escribe el archivo de imagen en el disco con la extensión correcta ("a.webp").
Veo pocas razones para cargar el binario, porque se crea trivialmente ejecutando
produce el archivo con 15330 bytes. Si alguien quiere, puedo subirlo a alguna parte.
Nota: la
-z
opcióncwebp
activa el modo de compresión sin pérdida.9
es la resistencia a la compresión (max).fuente
Python 3, 64513 bytes
¡Use solo ASCII!
http://pastebin.com/PMLb4Xti
Versión anterior, 64529 bytes: http://pastebin.com/nteYkUtM
fuente
import lzma,base64,os