Скажімо, у нас є певний набір функцій на рядках. Ці функції схожі на заповнення заготовок або мадлібів, за винятком того, що вони беруть лише один вхід і використовують його для заповнення всіх своїх заготовок. Наприклад, у нас може бути функція, яка виглядає так
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."]
За допомогою цього представлення існує лише одне представлення для кожної функції такого роду і лише одна функція для кожного представлення.
Дійсно акуратне, що набір таких функцій закритий під композицію. Тобто склад двох наших функцій - це завжди ще одна з цих функцій. Наприклад, якщо я складаю нашу функцію вище
["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."]
Завдання
Ваше завдання - взяти дві функції, описані як непусті списки рядків, і вивести їх склад у вигляді не порожнього списку рядків.
Для цього завдання викликом списку може бути будь-який упорядкований контейнер, який дозволяє копії, а рядок може бути власним типом рядка, списком символів або списком цілих чисел.
Це відповіді на код-гольф будуть набрані в байтах, а менша кількість байтів буде кращою.
Тестові справи
["","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"]