Défi: produire la sortie suivante en utilisant le moins de caractères possible:
_ _ _ _ _ _ _
| | | | ___| | | ___ __ _____ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
|/
Règles et restrictions:
Vous ne pouvez pas utiliser FIGLet ou tout autre outil similaire. (Sinon, ce
figlet Hello, world!
serait une solution triviale et à peu près imbattable.)Votre programme doit être entièrement composé de caractères ASCII imprimables - en particulier, les points de code 9 (TAB), 10 (LF) et 32 - 126. (Si votre langue / votre système d'exploitation nécessite des sauts de ligne CRLF, vous pouvez les utiliser au lieu de LF simples.) Oui , cela disqualifie malheureusement toute langue nécessitant des caractères non ASCII (ou des données non textuelles) dans le cadre de sa syntaxe.
La sortie doit ressembler exactement à l'exemple ci-dessus. Vous pouvez cependant inclure des espaces supplémentaires autour de la sortie si vous le souhaitez. Vous pouvez supposer un espacement des tabulations de 8 caractères (ou le paramètre par défaut natif de la plate-forme que vous avez choisie, si elle est cohérente).
Ps. Pour établir le par, j'ai trouvé une solution Perl de 199 caractères. Je ne le publierai pas encore, cependant, au cas où quelqu'un le proposerait indépendamment. (De plus, c'est un peu ringard.) Bien sûr, cela ne devrait pas vous décourager de publier votre propre solution, même si elle est plus longue.
Mise à jour: Maintenant que han l'a battu d'un caractère, voici ma solution Perl de 199 caractères:
use Compress'Zlib;say uncompress unpack u,'M>-I]BT$*`S$,`^]YQ=R:0,&_Z<DP?8@?WVQJ]E2J"%E$$@)R(/(/MCJ*\U!OM`Z#=5`4Y>6M=L\L%DMP&DB0V.4GQL&OOGB$4:%`4TT4!R8O-Z(^BTZWNV?>F86K:9+""-35*-LNC:T^D:_$#%^`";"DD0'
Elle est très similaire à la solution de DC (et à toutes les autres solutions basées sur zlib / gzip dans différentes langues), sauf que j'ai utilisé codage uu au lieu de base64 pour le texte compressé et quelques autres astuces de golf mineures.
Mise à jour 2 : Je pense qu'il est temps d'accepter officiellement un gagnant. La première place revient au code PHP de konsolenfreddy , car, même si vous comptez les caractères, il est le plus soumis jusqu'à présent. En fait, le combiner avec le flux DEFLATE optimisé de mon code Perl de 199 caractères donne une solution encore plus courte de 176 caractères:
<?=gzinflate(base64_decode("fYtBCgMxDAPvecXcmkDBv+nJMH2IH99savZUqghZRBICciDyD7Y6ivNQbwOg3VQFOXlrXbPLBZLcBpIkNjlJ8bBr754hFGhQFNNFAcmLzeiPotOt7tn3plq2mSwgjU1SjbLo2tPpGvxAxfgA"));
Cependant, je pense que han mérite une mention honorifique spéciale pour être si proche sans utiliser d'outils de décompression pré-écrits. Félicitations à vous deux et bonne année à tous!
la source
Réponses:
Stax , 137 octets
Exécuter et déboguer
Cela fonctionne comme ça.
0
s suivies de a1
sont traduites en caractères non-espace.1
s restants sont remplacés par des espaces.la source
Perl 5.10 - 195
198202 202203caractèresVoici une entrée qui ne nécessite aucune bibliothèque au-delà de la correspondance d'expression rationnelle de base. La chaîne encodée est de 131 caractères, et le code à décoder et à imprimer prend 64 caractères (en supposant qu'il n'y ait pas de nouvelle ligne à la fin de la source). L'idée est de représenter des chaînes de 3 caractères courantes par des lettres minuscules.
L'encodeur est beaucoup plus long et malheureusement pas très lisible en ce moment. L'idée de base est d'utiliser la programmation dynamique pour trouver le codage le plus court pour chaque ligne, étant donné un ensemble fixe de substitutions de chaînes. La chaîne de substitutions sur la dernière ligne a été créée par essais et erreurs, et il est possible qu'une autre chaîne de substitutions conduise à un programme plus court que ci-dessus.
Une astuce ici est que certaines substitutions sont plus courtes que 3 caractères: en raison de la façon dont perl
substr
fonctionne,x
est remplacé par '_
' ety
par '_
'. Ce dernier est nécessaire car\w
dans l'expression régulière correspond à «_
», qui est ensuite remplacé par «(_)
».la source
print
parsay
say
vous devez soit faire,use 5.010;
soit exécuter le script en une ligne avecperl -E 'script here'
. Le premier rend le code plus long et le second n'est pas approprié pour un script multi-lignes. Ai-je oublié quelque chose?-E
ne compte pas en nombre de caractères.s''...'
au lieu de$_=q!...!
; n'oubliez pas d'échapper à la citation unique. Avec cela etsay
au lieu deprint
(et en omettant la dernière nouvelle ligne), je descends à 198 caractères.#
pour les longs espaces blancs et j'ai obtenu votre solution à 190 caractères. Je me demande s'il est possible de descendre en dessous de 184 caractères - cela battrait toutes les solutions compressées par zlib jusqu'à présent.Brainfuck - 862 personnages:
la source
[<---->---]
sur la première ligne. (Vraisemblablement, cela aurait fini, mais je n'ai pas attendu assez longtemps pour cela.)Python (2.x), 194 caractères
la source
Javascript,
273265264 caractères:(
la source
return
-1 char :)Cette réponse est plus longue que l'impression de la chaîne; cependant, juste pour le plaisir, le voici:
Python, 485 caractères ☺
Puisque j'ai l'une des représentations ASCII les plus courtes du texte original compressé, je dois avoir la barre de défilement la plus longue dans mon code! C'est une victoire! :)
la source
PHP,
194189 caractèresC'est fondamentalement la même que la réponse Python et Perl, légèrement plus courte
la source
php -r'=...'
astuce ne semble pas fonctionner pour moi, mais vous pouvez simplement l'utiliser<?=...
pour 184 caractères. De plus, votre sortie semble avoir un espace supplémentaire où ler
et sel
rencontrent.-r'=..'
. nephp -r
compte pas? Il est inclus dans mes 189 chars ...-r
changement de PHP est quelque chose d'un cas limite, car, en plus de simplement prendre du code comme paramètre et de l'exécuter, il modifie également légèrement l'environnement d'analyse par rapport à l'exécution du code à partir d'un fichier. Je serais enclin à le compter comme 2 caractères supplémentaires - ce qui le met d'ailleurs même avec<?
.J,
167160 caractères (47 + 113)Une autre soumission sans compression intégrée. Utilise un encodage de longueur variable assez simple, encodant chaque caractère comme une série de 1 bits et séparant les caractères par 0 bits. La chaîne compressée ne comporte que 113 caractères.
la source
Python (2.7.x), 218 caractères
Assez simple ... pas vraiment satisfait de cette tentative.
la source
Bash,
199196193 caractèresAssez proche...
EDIT: jusqu'à 193!
la source
gzip -d
parzcat
.bash,
196192la source
Perl, 230 caractères
C'est fondamentalement la même que ma réponse Python. J'aimerais voir la version à 199 caractères .. ça ressemble à de la magie.
la source
Perl,
294290 octets.La chaîne compressée seule est
151130 octets.Ce n'est pas court, mais c'était vraiment amusant à écrire.
la source
Perl, 346 octets
La chaîne compressée seule, est de 111 octets.
En essayant de comprendre ce que
key= (0,(1,((((7,5),(6,(8,(11,(9,10))))),(4,3)),2)))
faisait le python avec , j'ai fini par faire une version perl très similaire.la source
PHP 590
de toute évidence, je n'essaie pas de gagner, je me suis simplement intéressé à essayer un autre schéma de compression, bien qu'il ne puisse même pas battre la solution PHP 302 en texte brut plus simple de copier-coller
cela fonctionne comme un bitmap sur 10 canaux
"golfé"
lisible
la source
Pylongolf2, 300 octets
Je n'ai trouvé aucune méthode d'encodage chic, donc je ne suis probablement pas en compétition.
la source
Golf-Basic 84, 325
En supposant qu'une calculatrice puisse imprimer des tirets, des barres obliques inverses, des tuyaux simples et des traits de soulignement.
la source
HTML + JS (223 caractères unicode)
Juste pour le fun:
NB: vous devez l'enregistrer dans un fichier HTML "UTF-8 with BOM".
la source
PowerShell , 220 byes = script: 9 + archive: 211
Essayez-le en ligne!
Le script Powershell pour créer l'archive
t
(voir TIO):la source