Dada uma sequência de letras ASCII (maiúsculas e / ou minúsculas), imprima o MathJax bruto necessário para exibir essa sequência bifurcada em cada caractere, em sobrescritos e subscritos. Por exemplo, as entradas cat
e horse
resultariam em saídas que o MathJax renderiza da seguinte forma, respectivamente:
Observe que apenas uma entrada é necessária para ser obtida - essas duas são listadas lado a lado simplesmente para economizar espaço vertical.
Significado de marcação
_
indica um subscrito.^
indica um sobrescrito.- As chaves são necessárias em torno de substrings sobrescritos ou sobrescritos que contêm mais sobrescritos ou sobrescritos, a fim de impedir que todos eles estejam no mesmo nível.
Casos de teste
Os casos de teste estão no formato input : output
. O primeiro caso de teste mostra a cadeia vazia, pois a entrada deve resultar na cadeia vazia como saída.
"" : ""
"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}}}}}}}"
Você pode ver como eles são renderizados colando a saída em mathurl.com .
Sem chaves redundantes
Felizmente, o MathJax renderiza marcações com chaves redundantes. Por exemplo, o seguinte será todos parecem idênticos quando renderizado: a
, {a}
, {}{a}
, {{{{a}}}}
.
No entanto, a saída válida para esse desafio não possui chaves redundantes. Observe em particular que caracteres únicos na saída não são cercados por chaves.
Ordem
A ordem do subscrito e do sobrescrito não é importante. A seguir, são equivalentes e serão indistinguíveis quando renderizados (e são todos 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}
Pontuação
Para cada idioma, o vencedor é o código mais curto em bytes.
Muitas notificações? Digite </sub>
para cancelar a inscrição
</sub>
para cancelar a inscrição hein, quem disse que eu quero cancelar a inscrição ou algo assim? Foi um teste para ver se eu li o post inteiro certo?Respostas:
Python,
9590869282 bytes10 bytes salvos graças a @ConnerJohnston
Experimente online!
fonte
[text](link)
, mas isso é realmente estragar;)Mathematica,
72847776 bytesUsa a codificação CP-1252 (Windows). Leva uma lista de caracteres como entrada.
Explicação
Defina a função
±
, com 2 ou mais argumentos. Rotule o primeiro argumentoa
, e o segundo e depoisb
.Crie um
List
equivalente a"{a_±b^±b}"
(±b
é avaliado novamente, recursivamente).Defina a função
±
, com 1 ou 0 argumentos. Rotule o primeiro argumentoa
, se existir, e atribua-o""
aoa
contrário.Crie um
List
equivalente a"a"
, preenchido comString
s vazios .Uma função pura que se aplica
±
à entrada, descarta o primeiro e o último elemento e converteList
emString
.fonte
CJam (35 bytes)
Este é um programa completo. Demonstração online .
3 bytes solucionam um erro no intérprete (veja abaixo).
Dissecação
Observe que o
min(n+1, 3)
objetivo é solucionar um erro no intérprete: deve haver algum padrão nos poderes de 10 que'}
seja menor que, mas não é óbvio .fonte
JavaScript (ES6),
5755 bytesComplexity (len) complexidade!De acordo com @PeterTaylor, este é realmente Θ (2 ^ len (s)), que ainda é o melhor possível ...fonte
Haskell , 71 bytes
Experimente online!
Se tivéssemos que gerar um código válido, o seguinte funcionaria para 44 bytes:
Experimente online!
fonte
SOGL V0.12 , 21 bytes
Experimente aqui!
Explicação:
fonte
Perl 5 , 54 + 1 (-p) = 55 bytes
Experimente online!
Quão?
A substituição na condição while quebra ocorrências de várias letras na primeira letra, seguidas pelo restante entre chaves assim:
O loop while executa a substituição até que não haja mais seqüências de várias letras. A substituição dentro do loop remove chaves de cerca de uma letra.
fonte
Ruby ,
767372686757 bytesUso de lambda economizando 4 bytes graças a Tutleman
Experimente online!
Ungolfed:
fonte
->s{...}
), que economiza 7 bytes. Em seguida, você pode salvar mais 2 bytes substituindo"#{s[0]}_
pors[0]+"_
. Você pode salvar mais um byte, atribuindo inline'{}'
a uma variável na primeira vez que o usar.t=f s[1..-1]
), então não acho que uma função anônima funcione e já reorganizei o início da string, mas posso usar a atribuição em linha.f=->s{...}
economiza 4 bytes, mesmo considerando o extra[]
necessário ao fazer a chamada recursiva..tr
bagunça ...Python 2 , 84 bytes
Experimente online!
fonte
Pitão , 47 bytes
Experimente online!
Esta é praticamente uma porta direta da resposta Python do @ Uriel. Indo para o golfe daqui a pouco.
fonte
PHP, 121 bytes
A função em si é de 104 bytes e mostra um aviso do PHP.
fonte
Retina , 43 bytes
Experimente online! O link inclui casos de teste. Explicação:
Faça a bola rolar cortando o último personagem. (Mas se for o único personagem, eles o deixam em paz.)
Mova o caractere back um passo de cada vez, obtendo o resultado anterior e tornando-o um subscrito e sobrescrito do próximo caractere.
Remova o red agora redundante e o exterior {} s.
fonte
Java (OpenJDK 8) , 121 bytes
Experimente online!
fonte
Javascript, 73 bytes
Explicação
Como não há um valor inicial especificado de
m
,reduceRight
assume o último elementos
como o valor inicial e começa a iterar no índices.length-2
.Mostrar snippet de código
fonte
s=>[...s].reduceRight((m,c)=>`{${c}_${m}^${m}}`).slice(1,-1)
tem apenas 60 bytes.