Zostałeś zatrudniony do napisania kodu do aplikacji do dyktowania, która pobiera głos ze źródła mówionego, analizuje go jako słowa i zapisuje na ekranie.
Kierownictwo tak naprawdę nie ufa ci tyle mocy w projekcie - niestety nie jesteś w stanie siedzieć i grać w golfa przez cały dzień zamiast wykonywać swoją pracę - więc po prostu dają ci naprawdę proste zadanie do wykonania: obrócić Zdanie z przerywaną interpunkcją w poprawnie sformatowanym zdaniu, gdzie „właściwie sformatowane” zostało zdefiniowane poniżej.
Zdanie to ciąg wejściowy. Słowo to grupa wyróżniających się znaków spacji. Interpunkcja to Słowo, którego pierwszą postacią jest
^.Słowo jest pisane wielką literą, jeśli pierwsza litera tego słowa nie jest małą literą (słowa pisane wielką literą pasują do wyrażenia regularnego
/[^a-z].*/).Pierwsze słowo zdania musi być pisane wielkimi literami.
A
^COMMAjest przecinkiem,i ma spację następującą, ale nie poprzedzającą.aaa ^COMMA bbbstaje sięaaa, bbb.A
^COLONto przecinek, który wygląda:.A
^SEMICOLONto przecinek, który wygląda;.A
^PERIODto przecinek, który wygląda.. Słowo po a^PERIODmusi być pisane wielką literą.A
^BANGto okres, który wygląda!.A
^DASHjest znakiem myślnika-i ma spację zarówno poprzedzającą, jak i następującą.A
^HYPHENjest także znakiem myślnika,-ale nie ma spacji po nim ani przed nią.Jest
^EMDASHto łącznik (nie myślnik!), Który jest przeliterowany--.An
^OPENQUOTEjest znakiem cudzysłowu", którego spacja jest poprzednia, ale nie następująca. Słowo następujące po^OPENQUOTEmusi być pisane wielkimi literami. Jeśli^OPENQUOTEpoprzedzone jest słowem, które nie jest interpunkcją, dodaj^COMMApomiędzy tym słowem a^OPENQUOTE. Jeśli^OPENQUOTEpoprzedzona jest interpunkcja, która powoduje, że następne słowo jest pisane wielką literą, powoduje to przejście^OPENQUOTEdo następnego słowa.A
^CLOSEQUOTEto digraf,,"który ma spację następującą, ale nie poprzedzającą. Jeśli^CLOSEQUOTEjest poprzedzone^COMMA,^PERIODlub^BANG, że interpunkcja znika i^CLOSEQUOTEjest napisane,",."albo!"odpowiednio. Jeśli znikająca interpunkcja określiła wielką literę, ta litera musi nadal występować przy następnym dostępnym słowie.Początkowe lub końcowe spacje w pełnym wyniku końcowym muszą zostać usunięte, a każdy ciąg dwóch lub więcej spacji z rzędu musi być zwinięty w pojedynczy znak spacji.
Wszelkie przypadki nieuwzględnione powyżej (np.
^COMMA ^COMMALub^SEMICOLON ^CLOSEQUOTElub^UNDEFINEDPUNCTUATION) nie wystąpią w przypadku dobrze sformułowanych danych wejściowych, a zatem zachowanie jest niezdefiniowane.
Zespół programistów informuje o następujących kwestiach:
Projekt jest napisany w języku [Twój język tutaj] i powinien być możliwie jak najkrótszy, aby zajmował jak najmniej miejsca, gdy jest to aplikacja na Androida / iPhone'a. Próbujesz wyjaśnić, że nie tak działa tworzenie aplikacji, ale oni nie słuchają. Ale hej, co za zbieg okoliczności! Jesteś niesamowitym golfistą w [swoim języku tutaj] !
Aplikacja nie będzie miała żadnych uprawnień dostępu do sieci i nie będzie żadnych bibliotek, które dokonałyby tego formatowania. Prawdopodobnie możesz przekonać kierownika zespołu, aby zezwolił ci na bibliotekę wyrażeń regularnych, jeśli istnieje ona dla twojego języka, ale jeśli uważasz, że potrzebujesz.
Obsługa zagnieżdżonych cytatów, które prawidłowo używają podwójnych / pojedynczych cudzysłowów, jest planowana w późniejszej wersji aplikacji, ale nie w wersji, nad którą pracujesz teraz, więc nie martw się o to.
Kierownictwo jest wielkim fanem rozwoju opartego na testach, dlatego zespół deweloperów zlecił już pewnej nieszczęsnej małpce klawiaturowej napisanie testów dla twojej części programu: (dodano nowe wiersze dla czytelności, traktuj je jako spacje)
Wejście:
hello ^COMMA world ^BANGWynik:
Hello, world!Wejście:
once upon a time ^COMMA there was a horse ^PERIOD that horse cost me $50 ^PERIOD ^OPENQUOTE eat your stupid oats ^COMMA already ^BANG ^CLOSEQUOTE I told the horse ^PERIOD the horse neighed back ^OPENQUOTE no ^CLOSEQUOTE and died ^PERIOD THE ENDWynik:
Once upon a time, there was a horse. That horse cost me $50. "Eat your stupid oats, already!" I told the horse. The horse neighed back, "No," and died. THE ENDWejście:
begin a ^PERIOD b ^COMMA c ^COLON d ^SEMICOLON e ^BANG f ^HYPHEN g ^DASH h ^EMDASH i ^OPENQUOTE j ^PERIOD ^OPENQUOTE k ^SEMICOLON ^OPENQUOTE l ^CLOSEQUOTE m ^BANG ^CLOSEQUOTE n ^PERIOD 0x6C6F6C endWynik:
Begin a. B, c: d; e! F-g - h--i, "j. "K; "l," m!" N. 0x6C6F6C end
To jest golf golfowy: wygrywa najniższy wynik. Możesz napisać funkcję o jednym argumencie łańcuchowym lub program odczytujący ze STDIN i zapisujący do STDOUT.
prompt()?