Biorąc pod uwagę ciąg liter ASCII (wielkie i / lub małe litery), wyprowadzaj surowy MathJax wymagany do wyświetlenia tego łańcucha rozgałęziającego się przy każdym znaku, do indeksu górnego i dolnego. Na przykład dane wejściowe cat
i horse
dają wyniki, które MathJax renderuje odpowiednio:
Należy pamiętać, że należy podjąć tylko jedno wejście - te dwa są wymienione obok siebie, aby zaoszczędzić miejsce w pionie.
Znaczenie znaczników
_
wskazuje indeks dolny.^
wskazuje indeks górny.- Nawiasy klamrowe są wymagane wokół indeksów z indeksami górnymi lub dolnymi, które zawierają dalsze indeksy górne lub indeksy dolne, aby zapobiec ich wszystkiemu na tym samym poziomie.
Przypadki testowe
Przypadki testowe mają format input : output
. Pierwszy przypadek testowy pokazuje pusty ciąg jako dane wejściowe, które powinny skutkować pustym ciągiem jako wyjściem.
"" : ""
"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}}}}}}}"
Możesz zobaczyć, jak są one renderowane, wklejając dane wyjściowe do mathurl.com .
Brak zbędnych aparatów ortodontycznych
MathJax z przyjemnością wyświetli znaczniki, które mają nadmiarowe nawiasy klamrowe. Na przykład, następujące wszyscy wyglądają identycznie przy wytapianiu: a
, {a}
, {}{a}
, {{{{a}}}}
.
Jednak prawidłowe dane wyjściowe dla tego wyzwania nie mają nadmiarowych nawiasów klamrowych. Zwróć uwagę, że pojedyncze znaki na wyjściu nie są otoczone nawiasami klamrowymi.
Zamówienie
Kolejność indeksu dolnego i górnego jest nieistotna. Poniższe są równoważne i będą nierozróżnialne podczas renderowania (i wszystkie są jednakowo poprawnymi wynikami):
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}
Punktacja
Dla każdego języka zwycięzcą jest najkrótszy kod w bajtach.
Za dużo powiadomień? Wpisz </sub>
do wypisania
</sub>
do wypisania się, kto powiedział, że chcę wypisać się czy coś? To był test, czy przeczytałem cały post, prawda?Odpowiedzi:
Python,
9590869282 bajtów10 bajtów zapisanych dzięki @ConnerJohnston
Wypróbuj online!
źródło
[text](link)
, ale to naprawdę psuje;)Mathematica,
72847776 bajtówWykorzystuje kodowanie CP-1252 (Windows). Pobiera na wejściu listę znaków.
Wyjaśnienie
Zdefiniuj funkcję za
±
pomocą 2 lub więcej argumentów. Oznacz pierwszy argumenta
, drugi i dalejb
.Utwórz
List
ekwiwalent do"{a_±b^±b}"
(±b
jest ponownie oceniany, rekurencyjnie).Zdefiniuj funkcję za
±
pomocą 1 lub 0 argumentów. Oznacz pierwszy argumenta
, jeśli istnieje, i przypisz""
doa
innego.Utwórz
List
odpowiednik"a"
wypełniony pustymi literamiString
s.Czysta funkcja, która ma zastosowanie
±
do danych wejściowych, upuszcza pierwszy i ostatni element i konwertujeList
naString
.źródło
CJam (35 bajtów)
To jest pełny program. Demo online .
3 bajty omijają błąd w tłumaczu (patrz poniżej).
Sekcja
Zauważ, że
min(n+1, 3)
chodzi o obejście błędu w tłumaczu: musi istnieć pewien wzór w potęgach 10, który'}
jest mniejszy niż, ale nie jest to oczywiste .źródło
JavaScript (ES6),
5755 bajtówComplex (len (s)) złożoność!Według @PeterTaylor jest to w rzeczywistości Θ (2 ^ len (s)), co wciąż jest najlepszym możliwym ...źródło
Haskell , 71 bajtów
Wypróbuj online!
Gdybyśmy tylko musieli wyprowadzić prawidłowy kod, następujące działania działałyby dla 44 bajtów:
Wypróbuj online!
źródło
SOGL V0.12 , 21 bajtów
Wypróbuj tutaj!
Wyjaśnienie:
źródło
Perl 5 , 54 + 1 (-p) = 55 bajtów
Wypróbuj online!
W jaki sposób?
Podstawienie w warunku while powoduje przerwanie występowania wielu liter w pierwszej literze, a następnie pozostałych w nawiasach klamrowych:
Pętla while wykonuje podstawienie, dopóki nie pozostaną już sekwencje wieloliterowe. Podstawienie w pętli usuwa nawiasy klamrowe z około pojedynczych liter.
źródło
Ruby ,
767372686757 bajtówWykorzystanie lambda oszczędza 4 bajty dzięki Tutleman
Wypróbuj online!
Nie golfowany:
źródło
->s{...}
), Która oszczędza 7 bajtów. Następnie możesz zapisać 2 kolejne bajty, zastępując"#{s[0]}_
jes[0]+"_
. Możesz zapisać kolejny bajt, przypisując'{}'
zmienną do zmiennej przy pierwszym użyciu.t=f s[1..-1]
), więc nie sądzę, żeby anonimowa funkcja działała i już zmieniłem początek łańcucha, ale mogę użyć przypisania wbudowanego.f=->s{...}
zapisuje 4 bajty, nawet uwzględniając dodatkowe[]
potrzebne do wykonania połączenia rekurencyjnego..tr
bałagan ...Python 2 , 84 bajtów
Wypróbuj online!
źródło
Pyth , 47 bajtów
Wypróbuj online!
To właściwie prosty port odpowiedzi na Python @ Uriel. Gra w golfa za chwilę.
źródło
PHP, 121 bajtów
Sama funkcja ma 104 bajty i wyświetla komunikat PHP.
źródło
Siatkówka , 43 bajty
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Spraw, by piłka toczyła się, odcinając ostatnią postać. (Ale jeśli to jedyna postać, zostaw ją w spokoju.)
Przesuwaj znak ¶ z powrotem o krok za każdym razem, za każdym razem biorąc poprzedni wynik i czyniąc go indeksem dolnym i górnym dla następnego znaku.
Usuń teraz zbędne ¶ i zewnętrzne {} s.
źródło
Java (OpenJDK 8) , 121 bajtów
Wypróbuj online!
źródło
JavaScript, 73 bajtów
Wyjaśnienie
Ponieważ nie ma określonej wartości początkowej
m
,reduceRight
bierze ostatni elements
jako wartość początkową i rozpoczyna iterację od indeksus.length-2
.Pokaż fragment kodu
źródło
s=>[...s].reduceRight((m,c)=>`{${c}_${m}^${m}}`).slice(1,-1)
ma tylko 60 bajtów.