Wenn Sie eine Zeichenfolge aus ASCII-Buchstaben (Groß- und / oder Kleinbuchstaben) angeben, geben Sie das unformatierte MathJax aus, das erforderlich ist, um diese Zeichenfolge bei jedem Zeichen in hochgestellte und tiefgestellte Zeichen aufzuteilen. Beispielsweise führen die Eingaben cat
und horse
zu Ausgaben, die von MathJax wie folgt dargestellt werden:
Beachten Sie, dass nur eine Eingabe erforderlich ist - diese beiden werden nebeneinander aufgelistet, um vertikalen Platz zu sparen.
Markup bedeutet
_
kennzeichnet einen Index.^
kennzeichnet einen hochgestellten Text.- Um hochgestellte oder tiefgestellte Teilzeichenfolgen, die weitere hochgestellte oder tiefgestellte Zeichenfolgen enthalten, sind geschweifte Klammern erforderlich, um zu verhindern, dass sich alle auf derselben Ebene befinden.
Testfälle
Testfälle liegen im Format vor input : output
. Der erste Testfall zeigt, dass die leere Zeichenfolge als Eingabe zu der leeren Zeichenfolge als Ausgabe führen soll.
"" : ""
"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}}}}}}}"
Sie können sehen, wie diese gerendert werden, indem Sie die Ausgabe in mathurl.com einfügen .
Keine überflüssigen Klammern
MathJax rendert gerne Markups mit überflüssigen Klammern. Zum Beispiel wird im Folgenden alle identisch aussehen , wenn wiedergegeben: a
, {a}
, {}{a}
, {{{{a}}}}
.
Eine gültige Ausgabe für diese Abfrage enthält jedoch keine redundanten Klammern. Beachten Sie insbesondere, dass einzelne Zeichen in der Ausgabe nicht von geschweiften Klammern umgeben sind.
Bestellung
Die Reihenfolge von tiefgestellt und hochgestellt ist unwichtig. Die folgenden Angaben sind äquivalent und können beim Rendern nicht unterschieden werden (und sind alle gleichermaßen gültige Ausgaben):
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}
Wertung
Für jede Sprache ist der Gewinner der kürzeste Code in Bytes.
Zu viele Benachrichtigungen? Geben Sie </sub>
auf unsubscript
</sub>
auf abmelden huh wer hat gesagt ich möchte abmelden oder so? Es war ein Test, um zu sehen, ob ich den ganzen Beitrag richtig gelesen habe?Antworten:
Python,
9590869282 Bytes10 Bytes gespart dank @ConnerJohnston
Probieren Sie es online!
quelle
[text](link)
, aber das ist wirklich verwöhnt;)Mathematica,
72847776 BytesVerwendet die CP-1252-Codierung (Windows). Nimmt eine Liste von Zeichen als Eingabe.
Erläuterung
Definieren Sie die Funktion
±
mit 2 oder mehr Argumenten. Beschriften Sie das erste Argumenta
und das zweite und weitereb
.Erstellen Sie ein
List
Äquivalent zu"{a_±b^±b}"
(±b
wird erneut rekursiv ausgewertet).Definieren Sie die Funktion
±
mit 1 oder 0 Argumenten. Beschriften Sie das erste Argumenta
, falls vorhanden, und weisen Sie es""
dema
anderen zu.Erstellen Sie ein
List
Äquivalent zu"a"
, aufgefüllt mit leerenString
s.Eine reine Funktion, trifft
±
auf den Eingang fällt erstes und letztes Element, und wandeltList
aufString
.quelle
CJam (35 Bytes)
Dies ist ein volles Programm. Online-Demo .
3 Bytes umgehen einen Fehler im Interpreter (siehe unten).
Präparation
Beachten Sie, dass dies dazu
min(n+1, 3)
dient, einen Fehler im Interpreter zu umgehen: Es muss ein Muster in Potenzen von 10 geben,'}
das kleiner ist als, aber es ist nicht offensichtlich .quelle
JavaScript (ES6),
57-55ByteΘ (len (s)) Komplexität!Laut @PeterTaylor ist dies tatsächlich Θ (2 ^ len (s)), was immer noch das bestmögliche ist ...quelle
Haskell , 71 Bytes
Probieren Sie es online!
Wenn wir nur gültigen Code ausgeben müssten, würde das folgende für 44 Bytes funktionieren:
Probieren Sie es online!
quelle
SOGL V0.12 , 21 Bytes
Probieren Sie es hier aus!
Erläuterung:
quelle
Perl 5 , 54 + 1 (-p) = 55 Bytes
Probieren Sie es online!
Wie?
Die Ersetzung in der while-Bedingung unterbricht das Auftreten mehrerer Buchstaben im ersten Buchstaben, gefolgt vom Rest in geschweiften Klammern wie folgt:
Die while-Schleife führt die Ersetzung durch, bis keine Mehrbuchstabenfolgen mehr übrig sind. Durch die Ersetzung innerhalb der Schleife werden Klammern um einzelne Buchstaben entfernt.
quelle
Ruby ,
767372686757 BytesDie Verwendung von Lambda spart dank Tutleman 4 Byte
Probieren Sie es online!
Ungolfed:
quelle
->s{...}
), das 7 Byte einspart. Dann können Sie 2 weitere Bytes speichern durch Ersetzen"#{s[0]}_
mits[0]+"_
. Sie können ein weiteres Byte speichern, indem'{}'
Sie bei der ersten Verwendung einer Variablen eine Inline-Zuordnung vornehmen .t=f s[1..-1]
), daher glaube ich nicht, dass eine anonyme Funktion funktioniert, und ich habe den Anfang der Zeichenfolge bereits neu angeordnet, kann aber die Inline-Zuweisung verwenden.f=->s{...}
Spart 4 Bytes und berücksichtigt sogar die zusätzlichen Daten, die[]
Sie für den rekursiven Aufruf benötigen..tr
Durcheinander finden kann ...Python 2 , 84 Bytes
Probieren Sie es online!
quelle
Pyth , 47 Bytes
Probieren Sie es online!
Dies ist so ziemlich ein direkter Port von @ Uriels Python-Antwort. Ich gehe gleich Golf spielen.
quelle
PHP, 121 Bytes
Die Funktion selbst hat 104 Bytes und zeigt einen PHP-Hinweis.
quelle
Retina , 43 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Bringe den Ball ins Rollen, indem du den letzten Charakter abschneidest. (Aber wenn es der einzige Charakter ist, lassen sie es in Ruhe.)
Bewegen Sie das Zeichen ¶ schrittweise zurück, wobei Sie jeweils das vorherige Ergebnis als tiefgestellten und hochgestellten Wert des nächsten Zeichens verwenden.
Entfernen Sie die jetzt redundanten ¶ und die äußeren {} s.
quelle
Java (OpenJDK 8) , 121 Byte
Probieren Sie es online!
quelle
Javascript, 73 Bytes
Erläuterung
Da es keinen angegebenen Anfangswert von gibt
m
,reduceRight
wird das letzte Element vons
als Anfangswert verwendet und die Iteration beginnt bei Indexs.length-2
.Code-Snippet anzeigen
quelle
s=>[...s].reduceRight((m,c)=>`{${c}_${m}^${m}}`).slice(1,-1)
ist nur 60 Bytes.