文字列に特定の関数セットがあるとしましょう。これらの関数は、空白またはmadlibを埋めるようなものですが、入力が1つだけで、それを使用してすべての空白を埋めることが異なります。たとえば、次のような関数があるとします
I went to the ____ store and bought ____ today.
この関数を文字列に適用cheese
すると、結果は次のようになります。
I went to the cheese store and bought cheese today.
これらの関数は、空ではない文字列のリストとして表すことができます。ここで、空白は単に文字列間のギャップです。たとえば、上記の関数は次のようになります。
["I went to the ", " store and bought ", " today."]
この表現では、この種のすべての関数に対して1つの表現しかなく、各表現に対して1つの関数しかありません。
本当にすてきなことは、そのような関数のセットが合成中に閉じられることです。つまり、2つの関数の構成は、常にこれらの関数の別の1つです。たとえば、上記の関数を
["blue ", ""]
(blue
入力の先頭に追加する関数)関数を取得します:
["I went to the blue ", " store and bought blue ", " today."]
ただし、これらはもう少し複雑になります。たとえば、最初の関数を
["big ", " and ", ""]
結果は
["I went to the big ", " and ", " store and bought big ", "and", " today."]
仕事
あなたの仕事は、文字列の空でないリストとして説明されている2つの関数を取り、文字列の空でないリストとしてその構成を出力することです。
このチャレンジの目的のために、リストは重複を許可する順序付けられたコンテナであり、文字列はネイティブ文字列型、文字のリスト、または整数のリストです。
これは、コードとゴルフの回答がバイト単位でスコアリングされ、バイト数が少ないほど良いことです。
テストケース
["","xy"] ["ab",""] -> ["ab","xy"]
["x","y","z"] ["a","b"] -> ["xa","bya","bz"]
["xy"] ["ab"] -> ["xy"]
["","",""] ["a",""] -> ["a","a",""]
["x",""] ["","",""] -> ["x","",""]
["x","y","z"] ["a","b","c"] -> ["xa","b","cya","b","cz"]
["x","x","x"] ["a"] -> ["xaxax"]
["w","x","y","z"] ["ab","cd","e"] -> ["wab","cd","exab","cd","eyab","cd","ez"]