Інвертувати метод Формат.
FormatМетод класу String (або еквівалент, такі як sprintf) доступний в більшості мов. В основному, це рядок "Формат", який може містити заповнювачі з деяким додатковим форматуванням, а замість цих заповнювачів потрібно вставити нульові або більше значень.
Ваше завдання - реалізувати зворотну функцію у вибраній вами мові.
API
Назва методу має бути format1або deformat.
Вхід : 1-й параметр буде рядком "Формат", як і у вихідному методі форматування. Другим параметром буде проаналізована рядок (див. Приклади нижче). Інші параметри не потрібні і не дозволені.
Вихід : масив (або еквівалент вашої мови вибору) значень, які були вилучені відповідно із заповнювачами у форматі.
Заповнювачі є {0}, {1}, {2}і т.д.
У разі поганого формату ви можете викинути помилку або повернути все, що завгодно.
У разі невірного введення, ви можете викинути помилку або повернути все, що завгодно. Неприпустимий введення таким чином, що не може бути згенерований з допомогою String.Format , використовуючи той же формат рядка, наприклад: '{0}{0}', 'AAB'.
Приклади
deformat('{0} {1}', 'hello world') => ['hello', 'world']
deformat('http{0}://', 'https://') => ['s']
deformat('http{0}://', 'http://') => [''] // array of one item which is an empty string
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
Неоднозначність
У разі неоднозначності ви можете повернути будь-яку відповідну відповідь. Наприклад:
deformat('{0} {1}', 'Edsger W. Dijkstra')
// both ['Edsger', 'W. Dijkstra'] and ['Edsger W.', 'Dijkstra'] are applicable.
Ще кілька правил
- Щоб зробити це легше, фактично не потрібно підтримувати форматування. Ви можете забути про основні нулі, питання про десяткові крапки або округлення. Просто генеруйте значення у вигляді рядків.
- Щоб зробити його нетривіальним, регулярні вирази заборонені .
- Вам не потрібно дбати про фігурні дужки введення (тобто другий вхідний параметр не буде містити
{s або}s).
Перемога
Це код-гольф ! (слід читати як "Це Спарта!") виграє правильна функція з найменшою довжиною. Стандартні лазівки заборонені.
['', 'AAAA'], ['A', 'AA'],['AA', '']
deformat('{0}{1}{0}', 'ABBA') => ['', 'ABBA']? Якщо так, є дешеве рішення, якщо кожен рядок не з’являється щонайменше двічі.
deformat('{0}_{1}_{0}', 'A_BB_A')?
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB'], що робити, якщо нас замість цього далиdeformat('{0}{1}{0}', 'AAAA')?