Essayons de jouer au golf cette œuvre d'art ascii représentant un golfeur:
'\. . |> 18 >> \. '. | O >>. «o | \. | / \. | / /. » | jgs ^^^^^^^ `^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^
Source: JGS - http://www.retrojunkie.com/asciiart/sports/golf.htm
Règles:
- Aucune entrée autorisée
- Aucune ressource externe autorisée
- La sortie doit être exactement ce texte, affiché dans une police à espacement fixe (console OS, console JS, balise HTML <pre>, ...), y compris le saut de ligne de début et de fin.
- Les guillemets environnants ou les guillemets doubles sont autorisés (la console JS ajoute des guillemets doubles lorsque vous affichez une chaîne, c'est correct)
La meilleure réponse sera celle qui utilise le moins de caractères dans n'importe quelle langue.
S'amuser!
Réponses:
CJam, 62 caractères
Essayez-le en ligne.
Essai
Comment ça marche
2G#b
convertit la chaîne précédente en entier en la considérant comme un nombre de base-65536.128b:c
reconvertit cet entier en une chaîne ( 110 octets ) en le considérant comme un nombre en base 128, qui~
exécute ensuite:(notation caret)
divise la chaîne en paires de deux caractères et effectue les opérations suivantes pour chaque paire: Pop le deuxième caractère de la chaîne, convertissez-le en entier et répétez la chaîne
" "
autant de fois.Par exemple,
".("
devient". "
, car le code de caractère ASCII de(
est 40.Finalement,
pousse la chaîne
"jgs"
, le caractère^
répété 7 fois, le caractère`
, le caractère^
répété 51 fois et un saut de ligne.la source
Rubis, 107
Je pensais que j'essaierais réellement de "générer" l'image en code (au lieu d'utiliser une fonction de compression existante):
Il y a des caractères non imprimables dans ce littéral de tableau.
Voici la vue hexadécimale du fichier, pour montrer également les caractères non imprimables:
Merci à Ventero pour quelques améliorations majeures! (Il a essentiellement réduit le code de 50%.)
la source
6.times{|i|S[i+1]=' '*55+?|}
à enregistrer 2 caractères.i
plus d'une fois. Bonne prise!S.fill{' '*55+?|}
permet d' économiser à la place quelques caractères (vous devrez définirS
comme['']*7
, changerputs
pourputs p,S,p
et soustraire 1 de toutes vos coordonnées y cependant). Ensuite, en utilisant varargs dans f (def f(*p,c)
), vous pouvez enregistrer le[]
dans les appels de fonction. Oh, et vous pouvez laisser tomber le()
autoury,x
.S
unidimensionnel, vous pouvez enregistrer 55 autres caractères;) Voici le code si vous ne voulez pas le faire vous-même.bash + iconv + code machine DosBox / x86 (
104979695 caractères)Je suggère de mettre cela dans un script dans un répertoire vide, il est presque garanti que le copier-coller dans un terminal va tout casser; encore mieux, vous pouvez récupérer le script ici tout prêt.
Production attendue:
Comment ça marche
La partie bash est juste un lanceur qui utilise
iconv
pour "décompresser" un.com
fichier à partir des caractères UTF-8 du script et le lance avec DosBox.Notez que cela pose une certaine limitation sur le contenu, car toutes les séquences d'entrée ne peuvent pas être interprétées comme UCS-2 sans
iconv
se plaindre; par exemple, pour une raison quelconque, de nombreuses opérations impliquant lebx
registre ont fait des ravages en fonction de l'endroit où je les ai utilisées, j'ai donc dû contourner ce problème plusieurs fois.Maintenant, la chose Unicode est juste de profiter des règles de "nombre de caractères"; la taille réelle (en octets) du script est bien plus grande que le
.COM
fichier d' origine .Le
.com
fichier extrait estet est de 108 octets de long. La source NASM pour cela est:
Tout cela n'est qu'un décompresseur
compressed.dat
dont le format est le suivant:compressed.dat
à son tour est généré à l'aide d'un script Python à partir du texte d'origine.Le tout se trouve ici .
la source
Python, 156
Cela utilise un formatage de chaîne avec un espace pour une compression de base.
la source
PHP, 147
Cela s'exécute sur la ligne de commande et sort directement sur la console:
la source
Perl - 127
129130132135137145Merci à Ventero et m.buettner pour leur aide dans mon optimisation RegEx.
la source
s/\d+(?!8?>)/%$&s/rg
/\d++(?!>)/
GCC C - 203 octets
J'ai pensé que je m'amuserais avec celui-ci. Cela compile sur ma version de MinGW et génère le texte attendu.
Espace ajouté pour plus de clarté.
Aucun des sites de collage de code en ligne ne permet l'utilisation de caractères à un octet en dehors de la plage ASCII, j'ai donc dû les échapper pour un exemple téléchargé. C'est par ailleurs identique cependant. http://codepad.org/nQrxTBlX
Vous pouvez également le vérifier avec votre propre compilateur.
la source
LOLCODE, 590 caractères
Cuz LOLCODE iz perfik language 4 golfin: iz easy 2 compres un obfuscate an it isnt verbose du tout.
Im pritee sure dis werkz, mais je doan a un interpréteur LOLCODE et http://repl.it ne semble pas 2 funcshuns liek.
(Tranzlashun généreusement fourni par les robots de http://speaklolcat.com cuz I doan speek lolcat)
Version en retrait, espacée et commentée du code (les commentaires LOLCODE commencent par BTW):
la source
Python -
205203197La chaîne
i
entrelace les personnages de l'art ascii avec leurs multiplicites, représentés comme des personnages, le tout dans l'ordre inverse. De plus, j'économise un peu d'espace en utilisant '!' au lieu de «G»i
et ensuite juste le remplacer.la source
Python (145)
Pas très original, je sais.
la source
Javascript ( ES6 )
193175 octetsEdit: Modified RegPack v3 pour maintenir les sauts de ligne, utilisez une
for in
boucle pour enregistrer 3 octets et supprimez eval pour la sortie de console implicite.Utilisation de la compression unicode de xem: 133 caractères
la source
ES6, 155 caractères
J'essaye juste une autre approche:
Exécutez cela dans la console JS de Firefox.
Chaque caractère unicode a la forme suivante: \ uD8 [ascii charcode] \ uDC [nombre de répétitions].
(Chaîne Unicode faite avec: http://jsfiddle.net/LeaS9/ )
la source
.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
PHP
Méthode 1, plus simple (139 octets):
Utilisation d'une chaîne pré-dégonflée.
Méthode 2, codage des séries d'espaces en lettres de l'alphabet (192 octets):
la source
PowerShell,
192188119La partie ci-dessus contient quelques non-caractères. Vidage hexadécimal:
Le schéma de codage est RLE avec la longueur codée au-dessus du 7 bit inférieur, qui est le caractère à afficher.
la source
Python - 236
la source
JS (190b) / ES6 (146b) / ES6 emballé (118 chars)
Exécutez ceci dans la console JS:
JS:
ES6:
Pack ES6: ( http://xem.github.io/obfuscatweet/ )
Merci à @nderscore!
la source
"\n6'\\19.2.24|>18>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs^^^^^^^`".replace(/\d+/g,a=>18-a?' '.repeat(a):a)+"^".repeat(50)+"\n"
"\n6'\\19.2.24|>0>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs58`101\n".replace(/\d+/g,a=>' ^'[a>51|0].repeat(a%51)||18)
(stackexchange ajoute des caractères de saut de ligne invisibles après 41 | \ )ES6, 163b / 127 caractères
Encore une autre approche, grâce à @nderscore.
Exécutez-le dans la console de Firefox
JS (163b):
Emballé (127c):
la source
Python, 70 caractères UTF-16
Bien sûr, vous devrez probablement utiliser la version hexadécimale:
ou la version base64:
La première "ligne" du programme déclare le codage UTF-16. Le fichier entier est UTF16, mais l'interpréteur Python interprète toujours la ligne de codage en ASCII (c'est le cas
#coding:UTF-16BE
). Après la nouvelle ligne, le texte UTF-16 commence. Cela revient simplement à l'print'<data>'.decode('zlib')
endroit où le texte est une version dégonflée de l'image ASCII cible. Un certain soin a été pris pour s'assurer que le flux n'avait pas de substituts (ce qui ruinerait le décodage).la source
zip
au lieu dezlib
peut enregistrer un caractère.zlib
plutôt quezip
est très utile.zlib
est un nombre pair de caractères.C # -
354332Un peu golfé:
la source
string[] args
.Main
n'a pas besoin d'arguments, il compile quand même (contrairement à Java). Le supprimer et le mettre en lignex
porte déjà ce chiffre à 333. Vous pouvez enregistrer un autre octet en supprimant l'espace entre les arguments dans leDeflateStream
ctor. Vous pouvez utiliser un casting pour le membre enum:,(CompressionMode)0
ce qui nous ramène à 324. Je dirais donc que ce n'est pas encore le plus court possible ;-)bzip2, 116
Après avoir vu la réponse de CJAM, je me suis dit que celle-ci devrait également être qualifiée.
Je doute qu'une autre explication soit nécessaire. :)
la source
C (gcc) , 190 octets
Essayez-le en ligne!
la source
Vim, 99 frappes
probablement jouable au golf
Explication:
la source