Dada una cadena de letras ASCII (mayúsculas y / o minúsculas), genera el MathJax sin procesar requerido para mostrar esa cadena bifurcada en cada carácter, en superíndices y subíndices. Por ejemplo, las entradas cat
y horse
darían como resultado salidas que MathJax representa de la siguiente manera, respectivamente:
Tenga en cuenta que solo se requiere una entrada: estas dos se enumeran una al lado de la otra simplemente para ahorrar espacio vertical.
Significado de marcado
_
indica un subíndice.^
indica un superíndice.- Se requieren llaves alrededor de las subcadenas con superíndice o subíndice que contienen más superíndice o subíndice para evitar que todas estén al mismo nivel.
Casos de prueba
Los casos de prueba están en el formato input : output
. El primer caso de prueba muestra la cadena vacía como entrada debe dar como resultado la cadena vacía como salida.
"" : ""
"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}}}}}}}"
Puede ver cómo se procesan pegando la salida en mathurl.com .
Sin llaves redundantes
MathJax felizmente representará el marcado que tiene llaves redundantes. Por ejemplo, lo siguiente será todo un aspecto idéntico cuando se representa: a
, {a}
, {}{a}
, {{{{a}}}}
.
Sin embargo, la salida válida para este desafío no tiene llaves redundantes. Tenga en cuenta en particular que los caracteres individuales en la salida no están rodeados por llaves.
Orden
El orden del subíndice y el superíndice no es importante. Los siguientes son equivalentes y serán indistinguibles cuando se procesen (y son todos productos igualmente válidos):
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}
Tanteo
Para cada idioma, el ganador es el código más corto en bytes.
¿Demasiadas notificaciones? Escriba </sub>
para cancelar la suscripción
</sub>
para cancelar la suscripción ¿ Quién dijo que quiero cancelar la suscripción o algo así? Fue una prueba para ver si leí toda la publicación, ¿verdad?Respuestas:
Python,
9590869282 bytes10 bytes guardados gracias a @ConnerJohnston
Pruébalo en línea!
fuente
[text](link)
, pero eso es realmente malo;)Mathematica,
72847776 bytesUtiliza la codificación CP-1252 (Windows). Toma una lista de caracteres como entrada.
Explicación
Defina la función
±
, con 2 o más argumentos. Rotula el primer argumentoa
, y el segundo y másb
.Cree un
List
equivalente a"{a_±b^±b}"
(±b
se evalúa nuevamente, de forma recursiva).Defina la función
±
, con 1 o 0 argumentos. Etiquete el primer argumentoa
, si existe, y asígnelo""
a loa
contrario.Cree un
List
equivalente a"a"
, rellenado conString
s vacío .Una función pura que se aplica
±
a la entrada, elimina el primer y el último elemento y convierteList
aString
.fuente
CJam (35 bytes)
Este es un programa completo. Demo en línea .
3 bytes evitan un error en el intérprete (ver más abajo).
Disección
Tenga en cuenta que
min(n+1, 3)
es para evitar un error en el intérprete: debe haber algún patrón en las potencias de 10 que'}
sea menor que, pero no es obvio .fuente
JavaScript (ES6),
5755 bytesComplexity (len (s)) complejidad!Según @PeterTaylor, esto es en realidad Θ (2 ^ len (s)), que sigue siendo el mejor posible ...fuente
Haskell , 71 bytes
Pruébalo en línea!
Si solo tuviéramos que generar un código válido, lo siguiente funcionaría para 44 bytes:
Pruébalo en línea!
fuente
SOGL V0.12 , 21 bytes
Pruébalo aquí!
Explicación:
fuente
Perl 5 , 54 + 1 (-p) = 55 bytes
Pruébalo en línea!
¿Cómo?
La sustitución en la condición while rompe las apariciones de varias letras en la primera letra, seguidas del resto en llaves como esta:
El ciclo while ejecuta la sustitución hasta que no queden más secuencias de varias letras. La sustitución dentro del bucle elimina llaves de alrededor de letras individuales.
fuente
Ruby ,
767372686757 bytesUso de lambda ahorrando 4 bytes gracias a Tutleman
Pruébalo en línea!
Sin golf:
fuente
->s{...}
. Ej. ), Que ahorra 7 bytes. Luego, puede guardar 2 bytes más reemplazando"#{s[0]}_
cons[0]+"_
. Puede guardar un byte adicional haciendo la asignación en línea de'{}'
una variable la primera vez que lo use.t=f s[1..-1]
), por lo que no creo que funcione una función anónima, y ya reorganicé el comienzo de la cadena, pero puedo usar la asignación en línea.f=->s{...}
ahorra 4 bytes, incluso contabilizando el extra[]
que necesita al hacer la llamada recursiva..tr
desastre ...Python 2 , 84 bytes
Pruébalo en línea!
fuente
Pyth , 47 bytes
Pruébalo en línea!
Esto es más o menos un puerto directo de la respuesta Python de @Uriel. Ir al golf en un poco.
fuente
PHP, 121 bytes
La función en sí es de 104 bytes y muestra un aviso PHP.
fuente
Retina , 43 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Haz que la pelota ruede cortando al último personaje. (Pero si es el único personaje, lo dejan en paz).
Mueva el carácter ¶ hacia atrás un paso a la vez, cada vez tomando el resultado anterior y convirtiéndolo en un subíndice y superíndice del siguiente carácter.
Elimine el ahora redundante ¶ y el exterior {} s.
fuente
Java (OpenJDK 8) , 121 bytes
Pruébalo en línea!
fuente
Javascript, 73 bytes
Explicación
Como no hay un valor inicial especificado de
m
,reduceRight
toma el último elemento des
como valor inicial y comienza a iterar en el índices.length-2
.Mostrar fragmento de código
fuente
s=>[...s].reduceRight((m,c)=>`{${c}_${m}^${m}}`).slice(1,-1)
solo tiene 60 bytes.