La mission est simple. Il suffit de sortir le numéro 2015 sous forme de code QR et de l'écrire dans un fichier nommé newyear.png
au format PNG. Le code doit être valide n'importe quel jour, donc vous ne devrez peut-être pas utiliser l'année en cours.
Le code QR sous forme de texte ressemble à ceci:
# # # # # # # # # # # # # # # # # #
# # # # #
# # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # #
# # # # # # # # # # # # # # # # #
# # #
# # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # #
# # # # # # # # #
# # # # # # # # # # #
# # # #
# # # # # # # # # # # # # #
# # # # # # #
# # # # # # # # #
# # # # # # # # # # #
# # # # # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # # # #
Le résultat écrit newyear.png
doit contenir ce code QR avec des bordures blanches de 5 pixels et des points d'un pixel. Il ne doit contenir rien d'autre que du code QR.
code-golf
graphical-output
kolmogorov-complexity
new-years
Hannes Karppila
la source
la source
Réponses:
Fichier brut, 184 octets = fichier de 173 octets + nom de fichier de 11 octets
J'espère que cela ne rompt aucune faille standard. Mais la sortie "a une complexité kolmogorov élevée et la façon la plus courte de la produire serait (très probablement) de l'imprimer littéralement ...".
Base 64 du fichier:
Au lieu de jouer à un programme, j'ai joué à l'image PNG résultante. Le code QR est un format très flexible, de nombreux paramètres peuvent être manipulés: l'encodage de l'entrée, le niveau de correction d'erreur et l'image de masquage. Ceux-ci généreront tous des symboles différents et donc compressés en fichiers de tailles différentes.
J'ai donc écrit un programme pour générer toutes ces combinaisons (6720 fichiers résultants), puis utiliser PNGOUT pour choisir celui qui a compressé dans le plus petit fichier. Il s'agit d'un fichier qui:
Ceci est appelé
test-3-1-H-Diamonds.bmp
si vous avez utilisé le programme ci-dessous. Cette image fait 175 octets longtemps après l'exécution de PNGOUT. Avec un niveau de correction d'erreur «élevé» dans le code QR «version 1», nous pouvons modifier jusqu'à 8 pixels dans la partie des données sans ruiner les données. Avec un peu d'essais et d'erreurs manuels, je peux le réduire à 173 octets présentés ci-dessus. Il peut probablement être plus petit mais épuiser toutes les combinaisons nécessite 208 C 8 ~ 7,5 × 10 13 vérifications que je ne vais pas faire;)Le programme Rust (0.13.0-nightly (5ba610265)) qui génère toutes les combinaisons:
la source
Mathematica,
217177176166 octetsVoici un début:
Moins de golf:
Le code QR est codé dans un numéro de base 36. Bien sûr, je pouvais le coder en ASCII étendu (base 256), mais cela ne ferait que raccourcir la chaîne de 30 octets, et je ne suis pas sûr de pouvoir faire la conversion au prix de beaucoup moins que cela.
Bien sûr, c'est Mathematica, donc il y a aussi le 63 octets
mais je suppose que c'est une échappatoire standard. ;) (Cela produit un code QR différent de celui du défi, donc je suppose que le code QR n'est pas unique?)
la source
36^^fl6ibg25c8z00uef53p4657dgd6hjzg41e5joead1qgz0l2xchqgso5r1a51v5no4zkw9v22okklg0cymmy2
place.ToCharacterCode
etFromDigits
ensuite.)Matlab 545 octets
Codé en dur dans un travail manuel minutieux et sans aucune compression / conversation intégrée . Je sais que ce n'est toujours pas aussi bon que les autres réponses mais je suis toujours heureux =)
Plus illisible (la version 545 actuelle):
Nous créons une matrice nulle 31 x 31, mais y accédons en tant que vecteur pour définir toutes les cellules avec les indices de
b
à1
. Les astuces que j'ai utilisées étaient la notation d'entiers consécutifs (comme[1,2,3,4] = 1:4
) et la suppression d'un des 100 chiffres en ajoutant un scalaire à chaque valeur du vecteur.Voyons voir si quelqu'un peut battre ça =)
la source
unreadable
correctement ... certainement lureadable
. Je l'ai vu juste après l'avoir suggéré et j'espérais que celui qui a lu mon montage l'a rejeté, mais ils l'ont aussi manqué apparemment. désolé pour le mauvais montage ...Bash, 206
252 257octetsL'utilisation de la
convert
commande intégrée àimagemagick
permet d'économiser 46 octets supplémentaires.Convertit l'
pbm
image encodée en base64 en unepng
image avecimagemagick
'sconvert
.Enregistré 5 octets en utilisant<<<
/ ici-chaîne .Ancienne version (257 octets):
echo iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeAQMAAAAB/jzhAAAABlBMVEX///8AAABVwtN+AAAAX0lEQVQI12PACdi/7G9gYJFUaGBgvaIHJG6CiMvrgGJyCxoY2H/tBxJ3rgIVekxnYGCU9WtgYDokBWSFezcwMPA/ARrwZwMDA4vwUwYG1nuTYMRdP6CYjDRQ9q8fbrsBLRkaYOOP83wAAAAASUVORK5CYII=|base64 -d > newyear.png
Juste une simple chaîne de commandes shell qui écrit le
png
fichier encodé en base64 dans stdinbase64
qui le décode à cause du-d
drapeau et écrit sa sortie standard dans newyear.png.la source
base64 -d>newyear.png<<<[the long string]
mais je ne suis pas sur une machine linux rn et je ne sais pas quel espace est obligatoirebase64 -d>newyear.png<<<[base64 string]
Ubuntu 14.04.Python 2 + PIL,
216215Fondamentalement, un portage de la solution Mathematica.
la source
Outils Shell communs + Imagemagick, 215
Un peu compliqué
, mais plus court que l'autre réponse shell.P1\n21 21
le format PBM P1la source