Odwróć metodę formatowania.
FormatMetoda klasy String (lub equivallent, takich jak sprintf) jest dostępny w większości języków. Zasadniczo wymaga ciągu „Format”, który może zawierać symbole zastępcze z dodatkowym formatowaniem oraz zero lub więcej wartości do wstawienia zamiast tych symboli zastępczych.
Twoim zadaniem jest zaimplementowanie funkcji odwrotnej w wybranym języku.
API
Nazwa metody powinny być format1albo deformat.
Dane wejściowe : 1. parametrem będzie ciąg „Format”, podobnie jak w oryginalnej metodzie formatowania. Drugi parametr będzie analizowanym ciągiem (patrz przykłady poniżej). Żadne inne parametry nie są potrzebne ani dozwolone.
Dane wyjściowe : tablica (lub odpowiednik wybranego języka) wartości, które zostały wyodrębnione odpowiednio z symbolami zastępczymi w formacie.
Symbole zastępcze są {0}, {1}, {2}, etc.
W przypadku złego formatu możesz zgłosić błąd lub zwrócić cokolwiek zechcesz.
W przypadku nieprawidłowych danych wejściowych możesz zgłosić błąd lub zwrócić cokolwiek zechcesz. Nieprawidłowy wejście jest taka, że nie mogą być generowane przez String.Format przy użyciu tego samego formatu znaków, na przykład: '{0}{0}', 'AAB'.
Przykłady
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']
Dwuznaczność
W przypadku niejasności możesz zwrócić dowolną odpowiednią odpowiedź. Na przykład:
deformat('{0} {1}', 'Edsger W. Dijkstra')
// both ['Edsger', 'W. Dijkstra'] and ['Edsger W.', 'Dijkstra'] are applicable.
Więcej zasad
- Aby to ułatwić, nie ma potrzeby obsługi formatowania. Możesz zapomnieć o wiodących zerach, kropkach dziesiętnych lub problemach z zaokrąglaniem. Po prostu wygeneruj wartości jako ciągi.
- Aby uczynić to nietrywialnym, Wyrażenia regularne są niedozwolone .
- Nie trzeba dbać o klamrami na wejściu (czyli parametr 2-ty wejście nie będzie zawierać żadnych
{s lub}s).
Zwycięski
To jest golf golfowy ! (należy czytać jako „To jest Sparta!”) wygrywa poprawna funkcja o najkrótszej długości. Standardowe luki są zabronione.
['', 'AAAA'], ['A', 'AA'],['AA', '']
deformat('{0}{1}{0}', 'ABBA') => ['', 'ABBA']? Jeśli tak, istnieje tanie rozwiązanie, chyba że każdy ciąg pojawi się co najmniej dwa razy.
deformat('{0}_{1}_{0}', 'A_BB_A')?
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB'], co jeśli otrzymalibyśmy zamiast tegodeformat('{0}{1}{0}', 'AAAA')?