10
///を解釈する(「スラッシュ」と発音)
難解な言語のゴルフを十分に得ることができないので、できますか? /// —発音のスラッシュ ——Perlのs///名声の正規表現置換機能に基づいた楽しい小さな言語です。スラッシュ/とバックスラッシュの2つの特殊文字のみが含まれています\。esolangs wikiで完全な記事を見つけることができますが、以下の言語の説明といくつかの例を再現します。 つまり、/pattern/repl/restプログラムで識別し、可能な限り何度も置換を行うことで機能します。いいえ文字は除いて特別ではない/と\:/画定パターンや交換プログラムで、しばらくは\リテラルを挿入することを可能にする/か、\あなたのコードに文字を。特に、これらは正規表現ではなく、単なる文字列の置換です。 あなたの課題は、できるだけ少ない文字で、STDINを読み取るプログラムまたは文字列引数を取る関数として、///言語のインタープリターを作成することです。 ///自体以外の任意の言語を使用できます。///;を解釈するライブラリは使用できません。ただし、正規表現、正規表現ライブラリ、または文字列一致ライブラリを使用できます。 実行 4つの状態、print、pattern、replacement、およびsubstitutionがあります。置換を除くすべての状態で: プログラムが空の場合、実行は停止します。 それ以外の場合、最初の文字がの場合、\次の文字(存在する場合)で何かを実行し、プログラムから両方を削除します。 それ以外の場合、最初の文字がの場合、/それを削除し、次の状態に変更します。 それ以外の場合は、最初の文字で何かをして、プログラムから削除します。 繰り返す。 状態は、print、pattern、replacement、およびsubstitutionを順に循環します。 では、印刷モード、文字手段の出力「何かを行います」。 では、パターンモードで、「何かをする」という意味は、現在のパターンに文字を追加します。 で代替モードで、「何かをする」という意味では、現在の交換に文字を追加します。 で置換モードでは、ルールの異なるセットに従ってください。置換が不可能になるまで、現在のパターンの最初の出現をプログラムの現在の置換で繰り返し置換します。その時点で、パターンと置換をクリアし、印刷モードに戻ります。 プログラム/foo/foobar/foo foo fooでは、次のことが起こります。 /foo/foobar/foo foo foo foo foo foo foobar foo foo foobarbar foo foo foobarbarbar foo foo ... これは永久にループし、置換モードを終了しません。同様に、パターンが空の場合、プログラムの先頭にある最初の空の文字列は常に一致するため、置換モードは永久にループし、停止することはありません。 例 no 出力:no。 / world! world!/Hello,/ world! world! world! 出力:Hello, …