Inversez la méthode Format.
La Format
méthode de la classe String (ou équivalente, comme sprintf
) est disponible dans la plupart des langues. Il prend essentiellement une chaîne "Format" qui peut contenir des espaces réservés avec une mise en forme supplémentaire, et zéro ou plusieurs valeurs à insérer à la place de ces espaces réservés.
Votre tâche consiste à implémenter la fonction inverse dans la langue de votre choix.
API
Le nom de la méthode doit être soit format1
ou deformat
.
Entrée : le 1er paramètre sera la chaîne "Format", comme dans la méthode de formatage d'origine. Le deuxième paramètre sera la chaîne analysée (voir les exemples ci-dessous). Aucun autre paramètre n'est nécessaire ni autorisé.
Production : un tableau (ou l'équivalent de la langue de votre choix) de valeurs qui ont été extraites de manière correspondante avec les espaces réservés au format.
Les espaces réservés sont {0}
, {1}
, {2}
, etc.
En cas de mauvais format, vous pouvez lancer une erreur ou retourner ce que vous voulez.
En cas d'entrée non valide, vous pouvez renvoyer une erreur ou retourner ce que vous voulez. Entrée non valide est telle que ne peut pas être généré par String.Format en utilisant même chaîne de format, par exemple: '{0}{0}', 'AAB'
.
Exemples
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']
Ambiguïté
En cas d'ambiguïté, vous pouvez renvoyer toute réponse appropriée. Par exemple:
deformat('{0} {1}', 'Edsger W. Dijkstra')
// both ['Edsger', 'W. Dijkstra'] and ['Edsger W.', 'Dijkstra'] are applicable.
Quelques règles supplémentaires
- Pour le rendre plus facile, il n'est pas nécessaire de réellement prendre en charge le formatage. Vous pouvez tout oublier sur les zéros non significatifs, les points décimaux ou les problèmes d'arrondi. Générez simplement les valeurs sous forme de chaînes.
- Pour le rendre non trivial, les expressions régulières ne sont pas autorisées .
- Vous n'avez pas besoin de prendre soin des accolades en entrée (c'est-à-dire que le deuxième paramètre d'entrée ne contiendra aucun
{
s ou}
s).
Gagnant
C'est du code-golf ! (doit être lu comme "C'est Sparte!") la fonction correcte ayant la longueur la plus courte l'emporte. Les failles standard sont interdites.
['', 'AAAA']
, ['A', 'AA']
,['AA', '']
deformat('{0}{1}{0}', 'ABBA') => ['', 'ABBA']
? Si c'est le cas, il existe une solution bon marché à moins que chaque chaîne n'apparaisse au moins deux fois.
deformat('{0}_{1}_{0}', 'A_BB_A')
?
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
, que se passerait-il si on nous donnait à la placedeformat('{0}{1}{0}', 'AAAA')
?