Инвертировать метод Формат.
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.
Еще несколько правил
- Чтобы сделать это проще, нет необходимости поддерживать форматирование. Вы можете забыть все о ведущих нулях, десятичной запятой или вопросах округления. Просто сгенерируйте значения в виде строк.
- Чтобы сделать это нетривиальным, регулярные выражения не допускаются .
- Вам не нужно заботиться о фигурных скобках на входе (т. Е. 2-й входной параметр не будет содержать
{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')?