(stdinまたはコマンドラインを介して)再帰形式の文字列を取り込むプログラムを作成します。
PREFIX[SUFFIXES]
どこ
PREFIX
空の文字列を含む、小文字(az)の任意の文字列を指定できます。SUFFIXES
PREFIX[SUFFIXES]
空のシーケンスを含む、再帰形式が連結された任意の文字列シーケンスです。
各サフィックスの文字列のリストを再帰的に評価してプレフィックスに追加することにより、入力から小文字の文字列のリストを生成します。このリスト内の文字列を任意の順序で、1行に1つずつ(およびオプションの末尾の改行も)標準出力します。
例
入力が
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
その後、接頭辞がある
cat
とし、接尾辞はs[up[][]]
、[]
、ch[e[r[]s[]]]
、とa[maran[]comb[]pult[[]ing[]]]
。各サフィックスには、独自のプレフィックスとサフィックスが順番にあります。出力は、これらの9ワードで任意の順序になります
catsup cats cat catcher catches catamaran catacomb catapult catapulting
入力はこのツリーをエンコードするため
そして、9つの出力ワードのそれぞれは、ルートからリーフへツリーを走査することによって形成できます。
ノート
プレフィックスは空の文字列である可能性があることに注意してください。
[donut[][]cruller[]]
出力が(任意の順序で)有効な入力です
donut cruller
空の行は、2番目のサフィックスが一致する空の文字列です。
接尾辞シーケンスも空にすることができるため、些細な入力の場合
[]
出力として単一の空行があります:
- 入力は一意の出力ワードのみを生成すると想定できます。
- たとえば、2回エンコードされる
hat[s[]ter[]s[]]
ため、無効な入力になりますhats
。 - 同様に、
[[][]]
空の文字列が2回エンコードされるため、無効です。
- たとえば、2回エンコードされる
- 入力が可能な限り短い、または圧縮されていると想定することはできません。
- たとえば、
'e'
上記の主な例の'ch'
ノードはノードと組み合わせることができますが、それは入力が無効であることを意味しません。 - 同様に、
[[[[[]]]]]
空の文字列を次善の方法でエンコードしているにもかかわらず、有効です。
- たとえば、
- プログラムの代わりに、入力文字列を引数として受け取り、出力を通常どおり印刷するか、文字列またはリストとして返す関数を作成できます。
バイト単位の最短コードが優先されます。