Hintergrund
LISP-Programmierer haben die Welt erobert! Klammern wurden als heilige Zeichen deklariert und können von nun an nur noch in LISP-Programmen verwendet werden. Es wurde entschieden, dass Klammern in literarischen Werken durch Fußnoten ersetzt werden sollen, und es ist Ihre Aufgabe, dies für vereinfachte Markdown-Texte zu automatisieren.
Eingang
Ihre Eingabe ist eine einzelne Zeichenfolge, die alphabetische ASCII-Zeichen, Leerzeichen und Sonderzeichen enthält ,.!?()
. Es enthält keine Zeilenumbrüche oder Ziffern. Die Klammern werden korrekt zugeordnet.
Ausgabe
Sie müssen jedes übereinstimmende Klammerpaar in der Eingabezeichenfolge in eine Fußnote konvertieren. Das passiert wie folgt:
- Ersetzen Sie das erste übereinstimmende Klammernpaar und die Teilzeichenfolge zwischen ihnen durch eine laufende Nummer, die von
1
den Markdown-Tags<sup>
und umbrochen beginnt</sup>
. - An das Ende der Zeichenfolge anhängen
- zwei newlines,
- das Markdown-Tag
<sub>
, - die Nummer aus Schritt 1,
- ein Leerzeichen,
- die Teilzeichenfolge zwischen den Klammern und
- das schließende Tag
</sub>
in dieser Reihenfolge.
- Wenn die Zeichenfolge noch Klammern enthält, fahren Sie mit Schritt 1 fort.
Ihre Ausgabe ist die resultierende Zeichenfolge, möglicherweise mit einer nachgestellten Newline. Sie müssen diesen genauen Algorithmus nicht implementieren, solange Ihre Ausgabe korrekt ist. Beachten Sie, dass möglicherweise geschachtelte Klammern vorhanden sind. In diesem Fall haben wir Fußnoten, die Verweise auf andere Fußnoten enthalten. Die Teilzeichenfolge zwischen Klammern kann auch leer sein. Beispiele finden Sie in den folgenden Testfällen.
Regeln und Wertung
Sie können entweder ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Wenn Ihre Sprache von Haus aus keine Dezimalzahlen unterstützt ( Husten Retina Husten ), können Sie die Fußnotenzahlen auf einer anderen Basis angeben, einschließlich binär oder unär; Die Verwendung von unären Zahlen führt jedoch zu einer Strafe von + 20% .
Testfälle
Eingang:
This input contains no parentheses.
Ausgabe:
This input contains no parentheses.
Eingang:
This has (some) parentheses (but not so many).
Ausgabe:
This has <sup>1</sup> parentheses <sup>2</sup>.
<sub>1 some</sub>
<sub>2 but not so many</sub>
Eingang:
This has (nested (deeply (or highly?) nested)) parentheses (and several groups).
Ausgabe:
This has <sup>1</sup> parentheses <sup>2</sup>.
<sub>1 nested <sup>3</sup></sub>
<sub>2 and several groups</sub>
<sub>3 deeply <sup>4</sup> nested</sub>
<sub>4 or highly?</sub>
Eingang:
Hmm()(()(,)) a()((trt)(v( (((((wut)))))(X)(Y)(Z) )!?!?!?!))oooooooo(oooo)oooo
Ausgabe:
Hmm<sup>1</sup><sup>2</sup> a<sup>3</sup><sup>4</sup>oooooooo<sup>5</sup>oooo
<sub>1 </sub>
<sub>2 <sup>6</sup><sup>7</sup></sub>
<sub>3 </sub>
<sub>4 <sup>8</sup><sup>9</sup></sub>
<sub>5 oooo</sub>
<sub>6 </sub>
<sub>7 ,</sub>
<sub>8 trt</sub>
<sub>9 v<sup>10</sup>!?!?!?!</sub>
<sub>10 <sup>11</sup><sup>12</sup><sup>13</sup><sup>14</sup> </sub>
<sub>11 <sup>15</sup></sub>
<sub>12 X</sub>
<sub>13 Y</sub>
<sub>14 Z</sub>
<sub>15 <sup>16</sup></sub>
<sub>16 <sup>17</sup></sub>
<sub>17 <sup>18</sup></sub>
<sub>18 wut</sub>
Beachten Sie die leeren Zeilen zwischen den Fußnoten.
foo (bar)\nfoot (note)
?