Le défi: produire cet art ASCII exact d'une toile d'araignée dans une fenêtre:
_______________________________
|\_____________________________/|
|| \ | / ||
|| \ /|\ / ||
|| /\'.__.' : '.__.'/\ ||
|| __.' \ | / '.__ ||
||'. /\'---':'---'/\ .'||
||\ '. /' \__ _|_ __/ '\ .' /||
|| | /. /\ ' : ' /\ .\ | ||
|| | | './ \ _|_ / \.' | | ||
||/ '/. /'. // : \\ .'\ .\' \||
||__/___/___/_\(+)/_\___\___\__||
|| \ \ \ /(O)\ / / / ||
||\ .\' \.' \\_:_// './ '/. /||
|| | | .'\ / | \ /'. | | ||
|| | \' \/_._:_._\/ '/ | ||
||/ .' \ / | \ / '. \||
||.'_ '\/.---.:.---.\/' _'.||
|| '. / __ | __ \ .' ||
|| \/.' '. : .' '.\/ ||
|| / \|/ \ ||
||____/_________|_________\____||
|/_____________________________\|
Source: Joan Stark (araignée légèrement modifiée, cadre et enlève les initiales pour relever le défi).
Caractères requis: _|\/'.:-(+)O
(12) + espace et nouvelle ligne (2)
Règles du challenge:
- Un ou plusieurs espaces de fin et / ou nouvelles lignes sont autorisés.
Règles générales:
- C'est du code-golf , donc la réponse la plus courte en octets est gagnante.
Ne laissez pas les langues de code-golf vous décourager de poster des réponses avec des langues autres que le code de golf. Essayez de trouver une réponse aussi courte que possible à n'importe quel langage de programmation. - Les règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés, programmes complets. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Ajoutez également une explication si nécessaire.
code-golf
ascii-art
kolmogorov-complexity
Kevin Cruijssen
la source
la source
.
7 caractères avant leO
. Est-il censé être un 7 caractères après aussi?Réponses:
SOGL V0.12 , 141 octets
Explication:
Essayez-le ici! (le programme contient des onglets alors voici une meilleure représentation du programme)
la source
Arnold C,
1257 1261 12561233 octetsC’est ma première tentative de programmation dans le langage suprême, je vais donc manger mes votes négatifs car je n’offre aucune solution intelligente à ce problème, bien que la programmation dans le langage descende des cieux.
Voici un compilateur si quelqu'un met par hasard en cause cet algorithme.
Rester dans les parages.
la source
TALK TO THE HAND
!vim,
373371 octets<ESC>
est un standin pour 0x1B.Ungolfed
Essayez-le en ligne!
Et pour clarifier l'explication qui vous a été donnée en tant qu'enfant: S'il est vrai que la seule émotion que les araignées ressentent personnellement est la haine, elles sont capables de sentir la peur à une distance de plus de 50 mètres.
la source
<CR>
mais les lignes se terminant par la<CR>
moyenne signifient-elles deux fois la touche La réponse semble être non dans les deux cas ci-dessus, mais ensuite, les lignes avecs/ /_/g
ettr
ne se terminent pas,<CR>
mais je ne peux pas le faire fonctionner sans appuyer sur Entrée.<CR>
s était une erreur et le saut de ligne fonctionne également. (J'avais entré les lignes en utilisant<C-v><ENTER>
, ce qui génère<CR>
; c'est pourquoi il apparaît comme^M
une nouvelle ligne.) J'ai modifié le code pour éliminer ces deux doublons et remplacer les retours à la ligne par des nouvelles lignes / sauts de ligne normaux. Toutes les nouvelles lignes restantes doivent être entrées une fois avec précision. (La version non-golfée comporte encore quelques lignes vierges; celles -ci ne correspondent pas aux pressions sur les touches. La version jouée au golf correspond à ce qui doit être dactylographié, à l'exception du<ESC>
s.){ cat foo.vim; echo ':wq'; } | vim a.txt
afin que vous ne soyez pas bloqué dans vim sans clavier attaché à stdin. L'avantage est que je peux exécuter le programme directement à partir d'un fichier au lieu d'essayer de le saisir exactement chaque fois que je modifie. Pour ce programme, les octets et les frappes au clavier sont équivalents, mais ce n'est pas toujours le cas. par exemple ,<C-v><ENTER>
est de trois touches, mais produit un octet,\r
.Gelée ,
206205 octetsUn lien niladique renvoyant une liste de caractères ou un programme complet imprimant l’art.
Essayez-le en ligne!
La symétrie verticale grossière pourrait-elle être utilisée?
Comment?
Les 158 premiers octets sont un très grand nombre écrit en base bijective 250 utilisant les 250 premiers octets de la page de code de Jelly:
Ce nombre (de l’ordre de 10 372 est converti en une liste de ses chiffres en base 9 (391 nombres entre 0 et 8), puis trois sont ajoutés aux 203 ème , 204 ème , 220 ème et 221 ème chiffre ( qui sera le corps des araignées):
Le résultat est ensuite converti en 12 caractères de la partie gauche (jusqu’à la colonne du milieu incluse) de l’art:
Les lignes pleines sont ensuite construits en faisant rebondir chaque ligne de côté gauche (qui réfléchit comme si le dernier caractère était un miroir), changer tout le
(
pour)
le\
pour/
et le/
vers\
, puis seulement à l' aide des nouvelles valeurs de droite côté main en utilisant un vectoriséand
avec le côté gauche d'avant. Le résultat est enfin associé à de nouvelles lignes pour créer l’art:la source
Charbon de bois ,
239238 octetsEssayez-le en ligne! Le lien est vers la version verbeuse du code. La plupart de ces opérations consistent simplement à imprimer une grande chaîne compressée, mais les parties répétitives ont été codées séparément pour réduire la longueur de la chaîne; en particulier, vous
Rectangle
économiserez un certain nombre d'octets en évitant que l'espace ne soit inséré dans la 17e colonne et même les lignes en diagonale ne sauvegardent un octet chacune.Édition: le fusain ne semble plus reconnaître la chaîne compressée et sa compression actuelle génère une chaîne plus courte qui enregistre 51 octets et permet à l'une des lignes en diagonale d'être replacée dans la chaîne pour une sauvegarde supplémentaire de 2 octets. (Notez que ce ne sont pas les comptes affichés par
-sl
; en effet, même le compte d'origine semble avoir été décalé de 1.) Cependant, trois économies supplémentaires auraient également été appliquées au code d'origine: Essayez-le en ligne!B
(Box
) au lieu deUR
(Rectangle
).↙P×_¹⁶←/
au lieu de↓P×_¹⁵←_/
.×_¹⁶J⁵¦¹
au lieu deP×_¹⁶M⁵¦²
.la source
PHP , 380 octets
Essayez-le en ligne!
PHP , 494 octets
Essayez-le en ligne!
la source
brainfuck , 4086 octets
Essayez-le en ligne!
Ceci est juste une méthode de recherche et de sélection pour générer la chaîne.
Ajout de nouvelles lignes pour plus de lisibilité:
la source
---------------------------------------------------------------
au lieu de quelque chose comme>++++++++[-<-------->]<+
?>
s et<
s apparaîtront plus tard dans le code. Je ne sais pas combien d'octets (le cas échéant) mon approche enregistre. Je vais examiner l'utilisation de plus de cellules.>>>
séquences ultérieurement, car elles ne sont utilisées que comme espace temporaire pour les factorisations. En particulier, si vous remplissez les cellules de gauche à droite, vous pouvez utiliser, par exemple, la cellule 5 comme espace temporaire pour la configuration de la cellule 4, puis (étant donné que la cellule 5 est mise à zéro dans le processus de définition de la cellule 4), valeur dans la cellule 5 en utilisant la cellule 6 comme espace temporaire. Tant que les valeurs finales des cellules sont inchangées, vous pouvez modifier quoi que ce soit avant la première.
sans avoir besoin de modifier le code suivant.JavaScript (ES6), 471 octets
Emballé avec une variante ES6 de RegPack .
la source
Java (JDK) , 494 octets
Essayez-le en ligne!
Merci à Kevin Cruijssen pour avoir joué au golf quelques octets, plus 6 octets en passant
Windows-1252
àcp1252
et uniquement en ASCII pour compresser un peu la chaîne :)Remarque: le fichier doit être codé en tant que Windows-1252 pour le nombre d'octets, mais peut être copié / collé en toute sécurité dans UTF-8 à des fins de test!
La longue chaîne est en fait la chaîne, telle quelle, avec ses caractères mappés sur un encodeur de caractères flexible (pour une fois, je suis ravi d'utiliser CP-1252). Le reste n'est que la méthode de démappage.
La cartographie a été trouvée en utilisant une permutation, d'abord initialisée à la fréquence de chaque caractère dans l'art ascii. Les mappages ayant pour résultat les caractères
'"'
et'\\'
ont été explicitement rejetés pour être la chaîne valide la plus courte possible.Ungolfed
Cartographie découverte
la source
()
pour un caractère aléatoire. Je n'ai jamais rien dit sur aucune entrée, vous pouvez donc utiliser un fichier non utiliséObject
qui est utilisénull
comme entrée. Méta-post pertinent. . Oh, et vous pouvez enregistrer un autre octet en passantbyte
àint
dans la boucle for-each.r+=a;
est équivalent àr = r + (a)
et avec des caractères, cela signifie qu'ils sont ajoutés les uns aux autres avant d'être concaténés, ils sont donc considérés comme étantint
s et la chaîne résultante est similaire à127190190190190190190190190190...
. J'ai écrit un commentaire à ce sujet dans la version code non-golfée;)Windows-1252
on peut jouer au golfcp1252
. Explication ici.b>>4
n'a pas besoin de parenthèses, souvenez-vous au niveau des bits, une très très faible prioritéRetina ,
465463425 octetsEssayez-le en ligne!
la source
C # (.NET Core) ,
935 676 636627 octetsEssayez-le en ligne!
Je voulais essayer une autre approche et RLE le dessin. Nous avons fini avec un code qui avait plus d'octets que le dessin lui-même (782 octets). Ensuite, j'ai compressé la chaîne RLE'd en créant un dictionnaire avec les groupes les plus utilisés, et après l'avoir comprimée, j'ai créé plus de dictionnaires, puis compressé à nouveau jusqu'à ce que la chaîne ne puisse plus être réduite. Le dessin est donc créé en développant d’abord ces groupes puis en décompressant avec RLE.
la source
Python 2.7,
414 405401 octetsDécomprime simplement la chaîne et l’imprime. :)
la source
Z_FILTERED
) qui évite les en-têtes et les sommes de contrôle. Dépose à 401 octets.print zlib.decompress('fY9BauhADEP3OcXbueUz1j6X6AUEuogP/xeTpCmUGgxK5iFZ5O85xn++a44ZAHPPPEoAcxMPovEbeBFyddLFyRbyi0i6Hpd5HKqTTVTfLmutOmutdTt0zRwzphoVOCETEkGZLrRTBtSATHFSyEAbhocYqgUmEwTu2r9njhlRalA1Eic2XYZ24ZljJlHu9ce/T8XJvTsFc68+vj6Ndl0EV5d27Wg7Z6R9VKlfXWZHC7alql+XMuACrHTOdCyg9OrSha9ohusoUX116QpQVq+1+uy1VlsFpPrqQjWI5PJIMHRxdQHA6oJqTraw4Aexv8HzqG8iSZR75lFOkpljvh9/G89/'.decode('base64'),-9)
compress[obj]() takes no keyword arguments
compress
ne prend pas, maiscompressobj
prend des arguments supplémentaires (mais pas en tant que mots-clés avant 3.3, vous devez passer les arguments positionnellement). Créer un compresseur, appelercompressor.compress(thedata)
, puis fairecompresseddata = compressor.flush()
équivaut à trois étapeszlib.compress
, mais vous pouvez le configurercompressobj
plus finement. Le seul inconvénient est que l'utilisationwbits=-9
signifie que vous devez passer-9
àdecompress
(afin qu'il sache ne pas rechercher l'en-tête ou la somme de contrôle).Python 3 ,
404398 octetsEssayez-le en ligne!
Même triche que la version 2.7 de Python , elle a juste été modifiée pour la conversion
bytes
<-> requise de Py3str
. Encore plus petit que le code 2.7 malgré les importations supplémentaires et le décodage requis en vertu de Python 3 fournissant un codage base85 intégré, réduisant ainsi la taille requise pour représenter les données compressées au format imprimable ASCII de 28 octets.Éditer: rasé six autres octets en les recompressant
wbits=-9
sans en-tête ni somme de contrôle sur les données (en échange de la nécessité d’ajouter un,-9
argumentzlib.decompress
).la source
Java 8, 719 octets
Peut certainement être joué au golf, mais ce n’est qu’un début et quelque chose que les autres golfeurs de Java peuvent (essayer de) battre. ;)
Explication:
Essayez-le ici.
la source
brainfuck , 5173 octets
Essayez-le en ligne!
Comment ça fonctionne
En un mot: trouve l'index ascii de chaque caractère de la ligne; puis l'imprime. Recherchez ensuite l’index ascii d’une nouvelle ligne et l’imprime. Rincez et répétez mon fils.
la source
256 octets, code machine (16 bits x86)
J'espérais pouvoir battre au moins la solution de charbon de bois, mais je n'ai pas réussi à en tirer plus (jusqu'à présent).
En cours d’exécution: save to codegolf.com, dosbox pour voir le résultat dont vous avez besoin de définir un point d’arrêt
cs:200
et de vider la mémoire à l’ds:400
endroit30e
... ou vous pouvez ajouter la pièce suivante, qui le jettera sur stdoutCeci est ma troisième entrée de golf de code. Le précédent était le cryptage xor .
Encore une fois: fait en utilisant HT hexeditor , sans compilateur , mais en utilisant Ctrl-a
assemble instruction
.Comment
Celui-ci a pris un peu pour le rendre ...
J'ai commencé par une approche simple, avec un quadrant et en essayant de la refléter. Cela a abouti à environ 250 octets et n’ayant que deux quadrants sur quatre. Une grande partie de cela était le premier quadrant lui-même, qui prenait 204 octets.
Je savais que ça pouvait être mieux.
J'ai rapidement vérifié que lz4 produisait un fichier de 144 octets (en-tête de saut). GZ donne environ 120 octets, mais il est clair que je ne pourrais pas créer de décompresseur dans environ 30 octets.
Une autre tentative consistait donc à créer manuellement le premier quadrant en le dessinant (saut, encodage 4 bits, etc.). Cela avec le code a donné 164 octets (attention, ce n’est que le premier quadrant), bien, mais j’étais convaincu que je pouvais faire mieux.
Je suis venu avec un codage, qui se termine dans 85 octets pour les données. Avec la table de traduction (qui n'est pas encore utilisée) et le décodeur, j'ai fini avec 144 octets. NOICE, je suis = lz4 et j'ai déjà un décodeur.
La prochaine étape consistait à fusionner la mise en miroir initiale de ~ 250 tentatives à celle-ci. Cela nécessitait un certain ajustement des données, mais était plus facile que prévu et aboutissait à 184 octets.
J'ai réalisé que j'aurais besoin de marqueurs supplémentaires pour créer un miroir horizontal, ce qui a étendu les données à 91b et le code à 190 octets (qui ont été mis à la corbeille plus tard).
Avec le miroir horizontal et la traduction finale, je me suis retrouvé avec environ 250 octets.
J'ai réussi à manger quelques octets ici et là, mais j'ai dû ajouter ces caractères laids, qui sont incorrectement mis en miroir. Cela a donné 259 octets ... C’est dommage, car j’utilisais une mémoire commençant à 0x200 et que je ne voulais pas refaire.
J'ai remplacé les conditions dans le miroir horizontal, pour utiliser la table de traduction en boucle, ce qui en soi n'a pas permis d'économiser beaucoup, mais combiné avec la modification des caractères incriminés en espaces et leur correction ultérieure, quelques octets ont été sauvegardés, ce qui a abouti à 256 octets finaux .
Vous pouvez voir la belle galerie, que j'ai faite, en faisant ceci ici
Dissection
Comme les entrées précédentes, celle-ci s'appuie également sur les valeurs initiales , mais pas autant que sur les valeurs précédentes:
ignorer les données, il y a 3 tables suivantes:
La table de traduction sera utilisée pour la mise en miroir horizontale
La table de traduction sera utilisée pour la substitution finale, afin de convertir les codes en ascii
Données codées, le codage est assez simple:
remplissez 12 * 17 octets avec ce qui deviendra un espace (8)
"Décompressez" les données comme décrit dans le tableau 3. Considérez l'utilisation de l' instruction AAM bien-aimée et abusez de scasb pour sauter des octets.
Cette partie est assez moche, elle définit la destination à 0x400:
Attention, ce miroir est fait en abusant de std / cld, pour passer
SI
en sens inverse. Seuls les\/()
caractères doivent être mis en miroir, ce qui est fait par xor à 0x1BF.Cela fait un miroir horizontal en utilisant la table 1 et en utilisant un merveilleux XLAT à 1 octet
Puis vient la partie ennuyeuse qui corrige 4 "pixels", je vais le sauter d'ici c'est ennuyeux
Dernière étape de la traduction en ascii.
PHEW! C'était amusant.
la source
JavaScript (ES6),
517...459457456433431418409397392 octetsInclut une dernière ligne d'espaces et un espace de fin sur la première ligne. Une partie de cela n’est pas encore jouée au golf de manière optimale - j’ai mis beaucoup de temps à tout faire pour que tout fonctionne.
Initialement basé sur Traktor53 depuis une solution abandonnée de 556 octets . Posté avec permission .
Liste de choses à faire
Trouvez un moyen moins coûteux de palindromiser les cordes.Essayez d'améliorer le remplacement de RLE.Voir si les 4 derniers remplacements peuvent être joués au golf de quelque façon que ce soit.Étudiez si la construction de l'image par quartiers entraînerait des économies importantes - je suppose que non!la source
string1[string2.indexOf( char) ]|| char
est une construction pour laquelle j'ai essayé mais je n'ai pas réussi à réduire le nombre d'octets. Bien joué!JavaScript
556468462448438387379 octetsMoins de golf
Compression
La publication d'origine (556 octets) utilisait des chiffres décimaux pour indiquer la répétition d'un caractère précédent dans la toile d'araignée. Des versions plus récentes comprime la moitié de la main gauche de la bande en caractères de 7 bits où le moindre grignotage significatif est un index dans un jeu de caractères, et trois bits d'ordre supérieur spécifier le nombre de caractères à la sortie plus 1: valeurs
000
et001
ne sont pas utilisés, des010
moyens 1 caractère et111
signifie six. Cette construction évite la production de caractères de contrôle.Merci à @Shaggy pour des conseils et astuces utiles dans la réécriture.
Comment ça fonctionne
Le quadrant supérieur gauche a été réécrit pour inclure des espaces réservés pour les moitiés supérieure et inférieure du Web:
donnant:
qui a été compressé en utilisant
Décompression
La décompression mappe les caractères codés aux caractères réels pour chaque quadrant. Dans du code,
X
est une liste de caractères indexés qui varie entre les sections Web supérieure et inférieure. Il fournit des valeurs pour les espaces réservés "suqh" et des réflexions sur les caractères durs, telles qu'entre "+" et "O".Codage
Le codage du caractère central est contraint d'utiliser un développement à un seul caractère. L'ordre des jeux de caractères est contraint de manière à ne pas produire de caractères DEL (0x7F), Grave (0x60) ou antislash (0x5C) pendant la compression.
Ceci est une mise à jour tardive en réponse à une activité sur la question.
la source
.reduce
et.map
ce que je ne pouvais pas. En même temps, j'ai changé l'algorithme pour obtenir 468 octets! Bon weekend./// , 463 octets
Essayez-le en ligne!
la source
Bash, 391 octets
Essayez-le en ligne!
Félicitations à tous ceux qui ont réussi à vaincre la compression immédiate: c'est moi qui jette l'éponge! Je reconnais les gens de Python qui ont été les premiers à utiliser l'approche zlib / gzip.
la source
Perl 5
439402 octetsPlutôt que d’utiliser base64 / gzip, cette approche consiste à inverser et inverser le quadrant supérieur gauche, avec les substitutions appropriées.
Essayez-le en ligne
Pour les intéressés, une version commentée:
la source
C #, 484 octets
Remarque: je ne suis pas à 100% sur la façon de les noter. Avec l'en-tête et le pied de page, c'est 544 octets.
Ungolfed:
Essayez-le en ligne!
la source
Ruby 1.9.3,
1102763 octetsEssayez-le en ligne!
la source
puts
une chaîne multiligne devrait prendre environ 790 octets. Votre énorme chaîne à analyser et le code à traiter finissent par être plus longs que la solution naïve ...C #,
401 399 397 396389 octetsCelui-ci était une excuse pour essayer le codage de Huffman
Ungolfed:
Ancienne version ungolfée avec commentaires:
Essayez-le en ligne!
la source
while(v>0){
for
v/=2
for(int p=0,l=0;v>0;v/=2){
while
de prendre le même espace qu'unfor
, maintenant.for(;someCondition;someAction);
vsfor(;someCondition;)someAction;
vswhile(someCondition)someAction;
. Mais dans l’ensemble,for
c’est effectivement plus court quewhile
, j’utilise donc presque toujoursfor
moi même.Python 2 , 395 octets
Essayez-le en ligne!
la source
Espace blanc ,
47234584 octetsLettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.Essayez-le en ligne .
Explication:
J'utilise l'approche expliquée dans cette astuce de Whitespace . L'approche décrite est la suivante:
La valeur constante idéale était
94
celle que j'ai générée avec ce programme Java . Utiliser94
donnerait un programme Whitespace d'une longueur totale de 7508 octets (7481 + 27 octets pour la boucle) ou de 5791 octets (5764 + 27) si nous implémentons déjà Duplicate Top (SNS
) lorsque deux des mêmes caractères sont adjacents.Après cela, j'ai utilisé manuellement Copier 1er (
STSSTN
), Copier 2ème (STSSTSN
) et Copier 3ème (STSSTTN
) (indexé 1) partout où cela économiserait des octets. Ce qui peut également être trouvé dans les conseils de Whitespace. Cela a abouti au programme de 4584 octets que vous voyez ici.la source
05AB1E , 204 octets
Essayez-le en ligne.
Vérifiez que c'est correct.
Explication:
la source