Étant donné une chaîne de lettres ASCII (majuscules et / ou minuscules), affichez le MathJax brut requis pour afficher cette chaîne bifurquant à chaque caractère, en exposants et indices. Par exemple, les entrées cat
et horse
entraîneraient des sorties que MathJax rend respectivement comme suit:
Notez qu'une seule entrée est nécessaire pour être prise - ces deux sont listées côte à côte simplement pour économiser de l'espace vertical.
Signification du balisage
_
indique un indice.^
indique un exposant.- Des accolades sont requises autour des sous-chaînes en exposant ou en indice qui contiennent d'autres exposants ou indices afin d'éviter qu'ils ne soient tous au même niveau.
Cas de test
Les cas de test sont au format input : output
. Le premier cas de test montre la chaîne vide en entrée devrait entraîner la chaîne vide en sortie.
"" : ""
"a" : "a"
"me" : "m_e^e"
"cat" : "c_{a_t^t}^{a_t^t}"
"frog" : "f_{r_{o_g^g}^{o_g^g}}^{r_{o_g^g}^{o_g^g}}"
"horse" : "h_{o_{r_{s_e^e}^{s_e^e}}^{r_{s_e^e}^{s_e^e}}}^{o_{r_{s_e^e}^{s_e^e}}^{r_{s_e^e}^{s_e^e}}}"
"bifurcate" : "b_{i_{f_{u_{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}^{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}}^{u_{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}^{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}}}^{f_{u_{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}^{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}}^{u_{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}^{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}}}}^{i_{f_{u_{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}^{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}}^{u_{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}^{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}}}^{f_{u_{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}^{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}}^{u_{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}^{r_{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}^{c_{a_{t_e^e}^{t_e^e}}^{a_{t_e^e}^{t_e^e}}}}}}}"
Vous pouvez voir comment ils sont rendus en collant la sortie dans mathurl.com .
Aucun appareil dentaire redondant
MathJax rendra avec plaisir le balisage qui a des accolades redondantes. Par exemple, ce qui suit tous semblent identiques lorsqu'ils sont rendus: a
, {a}
, {}{a}
, {{{{a}}}}
.
Cependant, une sortie valide pour ce défi n'a pas d'accolades redondantes. Notez en particulier que les caractères uniques dans la sortie ne sont pas entourés d'accolades.
Ordre
L'ordre des indices et des exposants est sans importance. Les éléments suivants sont équivalents et ne peuvent être distingués lors du rendu (et sont tous des résultats également valides):
c_{a_t^t}^{a_t^t}
c_{a^t_t}^{a_t^t}
c_{a_t^t}^{a^t_t}
c_{a^t_t}^{a^t_t}
c^{a_t^t}_{a_t^t}
c^{a^t_t}_{a_t^t}
c^{a_t^t}_{a^t_t}
c^{a^t_t}_{a^t_t}
Notation
Pour chaque langue, le gagnant est le code le plus court en octets.
Trop de notifications? Tapez </sub>
pour vous désinscrire
</sub>
pour vous désinscrire hein qui a dit que je veux me désinscrire ou quelque chose? C'était un test pour voir si j'ai lu le post en entier, non?Réponses:
Python,
9590869282 octets10 octets économisés grâce à @ConnerJohnston
Essayez-le en ligne!
la source
[text](link)
, mais c'est vraiment gâché;)Mathematica,
72847776 octetsUtilise le codage CP-1252 (Windows). Prend une liste de caractères en entrée.
Explication
Définissez la fonction
±
, avec 2 arguments ou plus. Étiquetez le premier argumenta
, le deuxième et le suivantb
.Créez un
List
équivalent à"{a_±b^±b}"
(±b
est évalué à nouveau, récursivement).Définissez la fonction
±
, avec 1 ou 0 arguments. Étiquetez le premier argumenta
, s'il existe, et affectez-""
lea
autrement.Créez un
List
équivalent à"a"
, rempli deString
s vides .Une fonction pure qui s'applique
±
à l'entrée, supprime le premier et le dernier élément et se convertitList
enString
.la source
CJam (35 octets)
Ceci est un programme complet. Démo en ligne .
3 octets contournent un bug dans l'interpréteur (voir ci-dessous).
Dissection
Notez que
min(n+1, 3)
c'est pour contourner un bug dans l'interpréteur: il doit y avoir un modèle dans les puissances de 10 qui'}
soit plus petit que, mais ce n'est pas évident .la source
JavaScript (ES6),
5755 octetsComplexity (len (s)) complexité!Selon @PeterTaylor, il s'agit en fait de Θ (2 ^ len (s)), ce qui est toujours le meilleur possible ...la source
Haskell , 71 octets
Essayez-le en ligne!
Si nous devions simplement sortir du code valide, ce qui suit fonctionnerait pour 44 octets:
Essayez-le en ligne!
la source
SOGL V0.12 , 21 octets
Essayez-le ici!
Explication:
la source
Perl 5 , 54 + 1 (-p) = 55 octets
Essayez-le en ligne!
Comment?
La substitution dans la condition while rompt les occurrences de plusieurs lettres dans la première lettre, suivies du reste entre accolades comme ceci:
La boucle while exécute la substitution jusqu'à ce qu'il ne reste plus de séquences de plusieurs lettres. La substitution à l'intérieur de la boucle supprime les accolades autour des lettres simples.
la source
Rubis ,
767372686757 octetsUtilisation de lambda économisant 4 octets grâce à Tutleman
Essayez-le en ligne!
Non golfé:
la source
->s{...}
), qui économise 7 octets. Ensuite, vous pouvez enregistrer 2 octets supplémentaires en remplaçant"#{s[0]}_
pars[0]+"_
. Vous pouvez enregistrer un octet supplémentaire en effectuant l'affectation en ligne de'{}'
à une variable la première fois que vous l'utilisez.t=f s[1..-1]
), donc je ne pense pas qu'une fonction anonyme fonctionnera, et j'ai déjà réorganisé le début de la chaîne, mais je peux utiliser l'affectation en ligne.f=->s{...}
économise 4 octets, même en tenant compte du supplément dont[]
vous avez besoin lors de l'appel récursif..tr
gâchis ...Python 2 , 84 octets
Essayez-le en ligne!
la source
Pyth , 47 octets
Essayez-le en ligne!
C'est à peu près un port direct de la réponse Python de @ Uriel. Aller jouer au golf un peu plus tard.
la source
PHP, 121 octets
La fonction elle-même fait 104 octets et affiche un avis PHP.
la source
Rétine , 43 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Faites rouler la balle en coupant le dernier personnage. (Mais si c'est le seul personnage, laissez-le tranquille.)
Reculez le caractère ¶ d'une étape à la fois, en prenant à chaque fois le résultat précédent et en faisant un indice et un exposant du caractère suivant.
Supprimez le ¶ désormais redondant et les {} s externes.
la source
Java (OpenJDK 8) , 121 octets
Essayez-le en ligne!
la source
Javascript, 73 octets
Explication
Parce qu'il n'y a pas de valeur initiale spécifiée de
m
,reduceRight
prend le dernier élément des
comme valeur initiale et commence l'itération à l'indexs.length-2
.Afficher l'extrait de code
la source
s=>[...s].reduceRight((m,c)=>`{${c}_${m}^${m}}`).slice(1,-1)
n'est que de 60 octets.