L' appel cosmique est un message envoyé dans l'espace en 1999 et 2003. Il est composé de 23 images bitmap monochromes 127 * 127px, comme détaillé ici .
Votre mission est d'écrire un programme qui affiche l'intégralité du message 127 * 2921px, soit sous forme de texte (composé de zéros, de uns et de sauts de ligne) ou sous forme d'image (dessinée à l'écran ou enregistrée sur disque). Il y aura deux catégories de gagnants: un pour la sortie texte et l'autre pour la sortie image.
Toutes les astuces sont autorisées, à l'exception des failles communes.
Il est permis de produire les 23 pages séparément.
Il est permis d'écrire jusqu'à 23 programmes (comme, un pour chaque page) et de additionner leur taille pour déterminer votre score.
Il est autorisé d'utiliser jusqu'à 23 fichiers binaires aux côtés de vos programmes. Leur poids est compté dans votre score.
Le code le plus court (en octets) gagne.
À 1 bit par pixel, l'image contient 127 * 127 * 23/8 = 46370 octets + 7 bits de données. (avertissement: il n'est pas autorisé de générer un zéro supplémentaire si vous stockez des valeurs de pixels dans 46371 octets)
Un retour à la ligne / espace est autorisé pour la sortie de texte.
La sortie visuelle ne peut contenir aucun pixel noir en plus des pixels noirs de l'appel cosmique. Il peut être dessiné dans une colonne (ordonnée correctement), ou divisé en 23 images, ou animé (comme un gif), également ordonné correctement.
Pièce jointe: la sortie texte et la sortie image à reproduire:
0
, le programme Snails vide imprime1
et le programme GolfScript vide imprime une nouvelle ligne . Quelqu'un peut soumettre une réponse de 0 octet, programme 373888 :)Réponses:
GIF, 27386 octets
Voici les pages de la transmission d'origine découpées en images GIF individuelles, il s'est avéré qu'elles n'étaient pas aussi petites que 1 PNG de toutes :(
la source
HTML, 16012b
J'ai compressé l'image en PNG8, l'ai ouverte dans un éditeur de texte, ajoutée
<svg onload="document.body.innerHTML='<img src=#>'">
à la fin, et voilà:
Démo: http://xem.github.io/miniCosmicCall/
NB: l'ajout
<img src=#>
fonctionne aussi mais il laisse beaucoup de déchets visibles, donc je préfère ne pas le faire.PS: pour le plaisir, j'ai également mis l'intégralité du message dans un seul tweet exécutable (vous pouvez le copier-coller dans une console de navigateur et l'image apparaît):
https://twitter.com/MaximeEuziere/status/742440423994580992
la source
Python 2.7 -
109718077 octetsmise à jour:
LZMA en fait pour une raison quelconque ne fonctionne pas pour moi, donc je suis retourné à Deflate.
J'ai trouvé un outil en ligne pour compresser encore plus le PNG (ils disent qu'ils utilisent la compression avec perte, mais le tableau reste inchangé)
__main__.py
script un peu plus ...La plupart des algorithmes de compression considèrent les données comme un tableau unidimensionnel et ne peuvent donc pas capturer les caractères répétitifs bidimensionnels affichés dans l'appel cosmique (IMO rend également plus difficile la compréhension des extraterrestres: P).
Tout d'abord, j'ai sélectionné chaque caractère comme un tableau 7 * 5 et fait une liste de tous les caractères uniques (101 si je me souviens). Ensuite, j'ai parcouru l'image, et lorsqu'un caractère a été trouvé, la position et l'index de ce caractère (dans la liste des caractères) ont été enregistrés.
Ces positions pourraient être représentées avec un seul int, mais avec plus de 2K caractères trouvés, et les positions allant de 0 à 370966 (forme divmod) nécessitent jusqu'à 3 octets chacune. Cependant, j'ai collecté les positions des caractères dans l'ordre, donc j'ai plutôt converti la position absolue en position décalée, ce qui rend la plupart des nombres inférieurs à 1 octet. J'ai encodé cette liste en utf-8 pour tenir compte des quelques nombres supérieurs à 1 octet
Après avoir enregistré et supprimé tous les caractères correspondants, j'ai enregistré le png avec une compression maximale. J'ai ensuite empaqueté le script de reconstruction python (inverser le même processus), le png, le modèle chatacter et la liste de position des caractères dans un fichier zip pour profiter du fait que python peut prendre un dossier ou un fichier zip comme argument, et il commencera son exécution dans n'importe quel fichier du niveau supérieur nommé
__main__.py
. J'ai joué un peu avec 7z pour obtenir la meilleure compression, qui s'est avérée être LZMA avec un dict 1M et des mots 32 bits.voici le script du décodeur (joué au golf mais avec des commentaires quand même)
lien à télécharger pour le fichier zip ...la source
Gzipbzip2
dans le shell,2091418965 octetsFaites le fichier de données de sortie avec la sortie de texte fournie dans la question,
bzip2
et renommez le fichier ens
. Cela permet alors:pour faire le travail. Il ajoute donc jusqu'à 18958 octets de données et une commande de 7 octets.
la source
Pyth, 46381 octets
Pour des raisons évidentes, il ne peut pas être affiché ici.
Échantillon.
Pastebin de hexdump du programme.
la source
jc.BC""127"
).Bash + WebP binaire, 11 + 15330 = 15341 octets
Comme le stipulent les règles:
et
… Je n'ai pas pu résister à poster quelque chose de bêtement simple.
Le programme est en bash et il sort l'image en l'enregistrant sur le disque.
Il utilise 1 fichier binaire, qui se trouve également être un fichier image (ouais WebP est un format d'image), donc le programme peut faire aussi peu que… faire une copie de ce fichier.
Donc, le code (11 octets):
En supposant que le binaire compagnon est nommé "b", le code écrit le fichier image sur le disque avec l'extension correcte ("a.webp").
Je vois peu de raisons de télécharger le binaire, car il est créé de manière triviale en exécutant
il produit le fichier avec 15330 octets. Si quelqu'un le veut, je peux le télécharger quelque part.
NB: l'
-z
option encwebp
active le mode de compression sans perte.9
est la résistance à la compression (max).la source
Python 3, 64513 octets
Utilisez uniquement ASCII!
http://pastebin.com/PMLb4Xti
Ancienne version, 64529 octets: http://pastebin.com/nteYkUtM
la source
import lzma,base64,os