Défi simple: essayez de sortir le texte suivant en aussi peu d'octets que possible:
the answer
toli fetheuniv
ersea nde ver
ything the ans
wer tol ife the
uni ver sean
dev ery thin
gth ean swer
tolifetheuni ver
seandeveryth ing
the ans wer
tol ifetheuniver
sea ndeverything
Le dessin original contient 332 caractères.
Règles
- Aucune entrée ou une entrée inutilisée.
- La sortie peut être dans n'importe quel format raisonnable (chaîne, liste de chaînes, matrice de caractères, etc.).
- Si vous préférez, vous pouvez utiliser des majuscules au lieu de minuscules pour le dessin.
- Les espaces vides et les nouvelles lignes sont autorisés.
- C'est du golf de code , donc le programme / la fonction la plus courte pour chaque langue peut gagner!
Remarques
- Cela a été identifié comme un doublon possible de Nous ne sommes pas étrangers au code du golf, vous connaissez les règles, et moi aussi . Cette question concernait la recherche et le remplacement de texte. Ici, vous devez dessiner une forme en utilisant un texte donné, et au moins deux des réponses actuelles démontrent que les langages de golf peuvent battre des algorithmes de compression simples dans ce cas.
42
avec les*
personnages, puis les remplacer par le texte, ce qui correspond parfaitement. Je n'ai pas eu à modifier le dessin original pour adapter la phrase. Coïncidence?Réponses:
Python 3 ,
224 220 219 215 211194 194 octets15 octets:if(j%27<1)*j
au lieu deif j*(j%27<1)
et déclaration d'impression simplifiée.7*'0'
Essayez-le en ligne!
Explication:
Utilise la compression en base 36 pour compresser ce nombre binaire (nouvelle ligne exclue)
Nous avons essentiellement deux compteurs
i
etj
. En rencontrant un,1
nous imprimons un espace; Sinon, si0
nous rencontrons, nous imprimons la prochaine lettre de la chaîne et augmentonsi
.j
augmente pour chacun0 or 1
. Nous imprimons également des nouvelles lignes chaque fois que c'est-à-dire quand celaj%27<1
devient vrai.la source
if j*(j%27<1):
àif(j%27<1)*j:
Python 2 ,
235218213 213 octetsEssayez-le en ligne!
Passé à une base 36 codée int des positions des lettres comme indiqué dans la question w.
Remplace chaque personnage un par un.
Edit: il semble officialaimm utilisé la base 36 avant moi.
la source
Bubblegum , 125 octets
Essayez-le en ligne!
la source
05AB1E ,
837974 octets-4 octets grâce à Erik l'Outgolfer
Produit une liste de chaînes pour enregistrer un octet.
Essayez-le en ligne!
Explication
2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm
est la représentation de base 255 du nombre décimal:Ce qui code respectivement des séries de
1
s et0
s, même les indices étant les1
s et les indices inégaux les0
s. Cela équivaut au nombre binaire:Code
la source
"ÔAo îιË3š1ĆRÕ₃FWš{ÓÛÏ.!XµM§&¶ñD°3PŸ{óNι2Ðbмh"253ö
par•—."Ôq‚Ā0Ál0j¿«ªžé¨0õ₄7“Ÿ!½ÏiæÆø-δq–Å05q½Yñá+•
pour -4.•
Python 2 ,
220 213212 octets-1 octets de commutation
()*4
pour%39
de @officialaimmEssayez-le en ligne!
Il s'agit d'une approche différente des autres réponses Python. J'utilise un codage
hexadécimal enbase 36 (économisé 7 octets) d'un codage destyle PNG de styleRLE de l'image (une chaîne de chiffres indiquant le nombre de pixels répétés consécutifs).La chaîne de chiffres est :
Ensuite, je parcours ces chiffres et j'imprime alternativement ce nombre de '' ou de caractères de la palette ('la réponse ...'). Lorsque plus de 9 caractères sont répétés, j'ajouterais simplement un 0 puis le reste.
la source
"theanswertolifetheuniverseandeverything"[w%39]
TIOSOGL V0.12 , 74 octets
Essayez-le ici!
la source
Permettez-moi de répondre à ma propre question ...
Charbon de bois ,
140 126112 octetsEssayez-le en ligne!
Vous avez ici un lien vers la version verbeuse la plus proche.
Explication (voir la version détaillée pour plus de détails):
)%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.
chaîne (68 octets, 48 octets compressés) est une représentation de l'encodage RLE du dessin. Chaque code de caractère moins 34 est le nombre d'espaces (positions paires) ou le nombre de caractères de texte (positions impaires) à imprimer consécutivement.gtheanswertolifetheuniverseandeverythin
chaîne (39 octets, 27 octets compressés) chaque fois qu'un caractère non blanc doit être écrit. Lorsque je vérifie la longueur d'une liste pour obtenir le caractère suivant et que cette liste commence par un élément, le dernier caractère de la chaîne est écrit en première position.Remerciements
la source
Assign(Minus(1, c), c);
vous pouvez simplement utiliserif (c) { ... } else Print(" ");
.for (68)
etAtIndex("...", i)
vous pouvez utiliser à laModulo(i, 2)
place et vous n'avez pas besoinc
du tout.if (Not(Modulo(Length(PushOperator(u, w)), 27)))
vous n'avez pas besoin nona
plus.AtIndex
fait un automatiqueModulo
doncModulo(b, 39)
peut être justeb
.u
est une variable prédéfinie qui n'est qu'un tableau vide (sauvegarde à l'aideA⟦⟧υ
). Chaque fois que vous y poussez quelque chose, sa longueur augmente de 1. C'est plus court qu'une affectation explicite à incrémenter.JavaScript (ES6),
207205203 octetsRenvoie un tableau de chaînes avec des espaces de fin.
la source
Rétine , 183 octets
Essayez-le en ligne! Explication: La première étape ajoute l'encodage RLE du bitmap de cellule et du texte, que la deuxième étape duplique ensuite à la longueur correcte, tandis que la troisième étape décode l'encodage RLE. La quatrième étape déplace ensuite le texte dans les cellules.
la source
Gelée , 83 octets
Essayez-le en ligne!
Comment ça marche
la source
Ajouter ++ , 1398 octets
Essayez-le en ligne!
Il semble que le codage en dur soit le moyen le plus court (au moins dans Add ++)
la source
Vim, 239 frappes
Ajout de sauts de ligne pour la "lisibilité"
Explication
La première ligne tire
life, the universe and everything
d'une page d'aide, qui est un octet plus court que la simple saisie. Cela transforme ensuite cela en ceci:La deuxième ligne décompose la chaîne en:
Et puis la dernière ligne le met en retrait pour faire:
la source
Gelée , 76 octets
Essayez-le en ligne!
la source
Rétine , 185 octets
Essayez-le en ligne!
la source
JavaScript, 215 octets
solution basée sur guest44851
la source
Rubis , 216 octets
Essayez-le en ligne!
Explication Similaire aux solutions Python, mais j'ai utilisé le codage de longueur d'exécution avant de le convertir en base 36. La chaîne de données ne contient donc que 54 caractères au lieu de 68.
Mais cela a fini par durer plus longtemps, espérons qu'il pourra être joué plus loin.
la source
Un port de ma réponse au charbon :
C # (.NET Core) , 229 octets
Essayez-le en ligne!
la source
C (gcc) ,
220219217213210 octets-1 octet grâce au plafond
-3 octets grâce à Jerry Jeremiah
Essayez-le en ligne!
la source
JavaScript,
265237219 octetsQuelques octets de moins grâce à @tsh.
JSFiddle
la source
join
Pyth , 121 octets
Cela contenait trop d'octets que je n'arrivais pas à afficher dans TIO, voici donc un hexdump:
Essayez-le en ligne!
Vous pouvez ajouter un appel à
wc
ouxxd
dans le script bash pour voir la longueur en octets ou le vidage hexadécimal que j'ai produit ci-dessus.Fait intéressant, ce programme présente un bogue mineur (?) En Pyth. Tous les octets de retour chariot (0x0d) sont lus comme des octets de nouvelle ligne (0x0a) lorsqu'ils sont dans des littéraux de chaîne. Cela m'oblige à ajouter 6 octets:
X ... ]T]13
pour remplacer le dix incorrect par un treize.Sinon, l'idée derrière ce code était assez simple: enregistrez chaque position où une série d'espaces blancs se produit. Ensuite, associez chacun de ces indices au nombre d'espaces de cette exécution. Ensuite, reconstruisez la chaîne d'origine en répétant la phrase quatre fois, puis en l'insérant aux emplacements appropriés. Si le nombre d'espaces enregistrés était nul, une nouvelle ligne est insérée à la place.
la source
Java (OpenJDK 8) ,
258252251 octetsEssayez-le en ligne!
C'est une implémentation plutôt naïve. D'abord un masque, pour les caractères imprimés, puis un survol du texte jusqu'à la fin.
la source
int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}
.Javascript, dessin approximatif. 319 octets
^ pour ce que ça vaut, pas vraiment, mais avant de supprimer le code qui a échoué.
la source