Invertire il metodo di formattazione.
Il Formatmetodo della classe String (o equivalente, come sprintf) è disponibile nella maggior parte delle lingue. Prende sostanzialmente una stringa "Format" che può contenere segnaposto con una formattazione aggiuntiva e zero o più valori da inserire al posto di quei segnaposto.
Il tuo compito è implementare la funzione inversa nella tua lingua preferita.
API
Il nome del metodo dovrebbe essere format1o deformat.
Input : il primo parametro sarà la stringa "Formato", proprio come nel metodo di formato originale. Il secondo parametro sarà la stringa analizzata (vedere gli esempi seguenti). Non sono necessari né consentiti altri parametri.
Output : un array (o l'equivalente della lingua scelta) di valori estratti in modo corrispondente con i segnaposto nel formato.
I segnaposto sono {0}, {1}, {2}, etc.
In caso di formato errato, potresti generare un errore o restituire quello che preferisci.
In caso di input non valido, è possibile generare un errore o restituire ciò che si desidera. Ingresso valido è tale che non può essere generato da String.Format utilizzando stessa stringa di formato, ad esempio: '{0}{0}', 'AAB'.
Esempi
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']
Ambiguità
In caso di ambiguità è possibile restituire qualsiasi risposta adeguata. Per esempio:
deformat('{0} {1}', 'Edsger W. Dijkstra')
// both ['Edsger', 'W. Dijkstra'] and ['Edsger W.', 'Dijkstra'] are applicable.
Alcune altre regole
- Per semplificare, non è necessario supportare effettivamente la formattazione. Puoi dimenticare tutto sui principali zeri, virgola decimale o problemi di arrotondamento. Basta generare i valori come stringhe.
- Per renderlo non banale, le espressioni regolari non sono consentite .
- Non è necessario prendersi cura di parentesi graffe in ingresso (cioè il parametro 2 ° ingresso non conterrà alcun
{s o}s).
vincente
Questo è code-golf ! (va letto come "This is Sparta!") vince la funzione corretta che ha la lunghezza più breve. Sono vietate le scappatoie standard .
['', 'AAAA'], ['A', 'AA'],['AA', '']
deformat('{0}{1}{0}', 'ABBA') => ['', 'ABBA']? In tal caso, esiste una soluzione economica a meno che ogni stringa non appaia almeno due volte.
deformat('{0}_{1}_{0}', 'A_BB_A')?
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB'], cosa succede se invece ci venisse datodeformat('{0}{1}{0}', 'AAAA')?