バックグラウンド
LISPプログラマーが世界を席巻しました!括弧は神聖な文字として宣言されており、今後はLISPプログラムでのみ使用できます。文学作品のカッコは脚注に置き換えられることが決定されており、これを自動化してマークダウンテキストを簡素化することがあなたの仕事です。
入力
入力は、アルファベットのASCII文字、スペース、および特殊文字を含む単一の文字列,.!?()
です。改行や数字は含まれません。括弧は正しく一致します。
出力
入力文字列内の一致した括弧の各ペアを脚注に変換します。これは次のように発生します。
- 括弧の最初の一致するペアとそれらの間の部分文字列
1
を、Markdownタグ<sup>
との間でラップされた開始番号で置き換える</sup>
。 - 文字列の最後に追加
- 2つの改行、
- Markdownタグ
<sub>
、 - ステップ1の番号
- スペース、
- 括弧の間の部分文字列、および
- 終了タグ
</sub>
、この順序で。
- 文字列にまだ括弧が残っている場合は、手順1に進みます。
出力は結果の文字列であり、末尾に改行が含まれる場合があります。出力が正しい限り、この正確なアルゴリズムを実装する必要はありません。括弧がネストされている場合があることに注意してください。その場合、他の脚注への参照を含む脚注があります。括弧の間の部分文字列も空にすることができます。例については、以下のテストケースを参照してください。
ルールとスコアリング
完全なプログラムまたは関数のいずれかを作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。
ご使用の言語が10進数をネイティブにサポートしていない場合(咳 Retina 咳)、バイナリまたは単項を含む別のベースで脚注番号を指定できます。ただし、単項数を使用すると、ペナルティが+ 20%になります。
テストケース
入力:
This input contains no parentheses.
出力:
This input contains no parentheses.
入力:
This has (some) parentheses (but not so many).
出力:
This has <sup>1</sup> parentheses <sup>2</sup>.
<sub>1 some</sub>
<sub>2 but not so many</sub>
入力:
This has (nested (deeply (or highly?) nested)) parentheses (and several groups).
出力:
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>
入力:
Hmm()(()(,)) a()((trt)(v( (((((wut)))))(X)(Y)(Z) )!?!?!?!))oooooooo(oooo)oooo
出力:
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>
脚注間の空行に注意してください。
foo (bar)\nfoot (note)
何ですか?