Inverta o método Format.
O Format
método da classe String (ou equivalente, como sprintf
) está disponível na maioria dos idiomas. Basicamente, é necessária uma string "Format" que pode conter espaços reservados com alguma formatação extra e zero ou mais valores a serem inseridos em vez desses espaços reservados.
Sua tarefa é implementar a função inversa no idioma de sua escolha.
API
O nome do método deve ser format1
ou deformat
.
Entrada : o 1º parâmetro será a string "Format", assim como no método de formato original. O segundo parâmetro será a string analisada (veja os exemplos abaixo). Nenhum outro parâmetro é necessário nem permitido.
Saída : uma matriz (ou o equivalente do idioma da sua escolha) de valores que foram extraídos correspondentemente com os espaços reservados no formato.
Os marcadores são {0}
, {1}
, {2}
, etc.
Em caso de formato incorreto, você pode gerar um erro ou retornar o que quiser.
Em caso de entrada inválida, você pode gerar um erro ou retornar o que quiser. Dados de entrada é de tal forma que não pode ser gerado por String utilizando a mesma cadeia de formato, por exemplo: '{0}{0}', 'AAB'
.
Exemplos
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']
Ambiguidade
Em caso de ambiguidade, você pode retornar qualquer resposta adequada. Por exemplo:
deformat('{0} {1}', 'Edsger W. Dijkstra')
// both ['Edsger', 'W. Dijkstra'] and ['Edsger W.', 'Dijkstra'] are applicable.
Mais algumas regras
- Para facilitar, não há necessidade de oferecer suporte à formatação. Você pode esquecer tudo sobre zeros à esquerda, ponto decimal ou questões de arredondamento. Apenas gere os valores como strings.
- Para torná-lo não trivial, expressões regulares não são permitidas .
- Você não precisa cuidar de chaves na entrada (ou seja, 2 parâmetro de entrada não conterá quaisquer
{
s ou}
s).
Ganhando
Isso é código-golfe ! (deve ser lido como "This is Sparta!"): a função correta com o menor comprimento vence. As brechas padrão são proibidas.
['', 'AAAA']
, ['A', 'AA']
,['AA', '']
deformat('{0}{1}{0}', 'ABBA') => ['', 'ABBA']
? Nesse caso, existe uma solução barata, a menos que cada string apareça pelo menos duas vezes.
deformat('{0}_{1}_{0}', 'A_BB_A')
?
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
, e se tivéssemos recebidodeformat('{0}{1}{0}', 'AAAA')
?