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
^COMMA
jest przecinkiem,
i ma spację następującą, ale nie poprzedzającą.aaa ^COMMA bbb
staje sięaaa, bbb
.A
^COLON
to przecinek, który wygląda:
.A
^SEMICOLON
to przecinek, który wygląda;
.A
^PERIOD
to przecinek, który wygląda.
. Słowo po a^PERIOD
musi być pisane wielką literą.A
^BANG
to okres, który wygląda!
.A
^DASH
jest znakiem myślnika-
i ma spację zarówno poprzedzającą, jak i następującą.A
^HYPHEN
jest także znakiem myślnika,-
ale nie ma spacji po nim ani przed nią.Jest
^EMDASH
to łącznik (nie myślnik!), Który jest przeliterowany--
.An
^OPENQUOTE
jest znakiem cudzysłowu"
, którego spacja jest poprzednia, ale nie następująca. Słowo następujące po^OPENQUOTE
musi być pisane wielkimi literami. Jeśli^OPENQUOTE
poprzedzone jest słowem, które nie jest interpunkcją, dodaj^COMMA
pomiędzy tym słowem a^OPENQUOTE
. Jeśli^OPENQUOTE
poprzedzona jest interpunkcja, która powoduje, że następne słowo jest pisane wielką literą, powoduje to przejście^OPENQUOTE
do następnego słowa.A
^CLOSEQUOTE
to digraf,,"
który ma spację następującą, ale nie poprzedzającą. Jeśli^CLOSEQUOTE
jest poprzedzone^COMMA
,^PERIOD
lub^BANG
, że interpunkcja znika i^CLOSEQUOTE
jest 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 ^COMMA
Lub^SEMICOLON ^CLOSEQUOTE
lub^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 ^BANG
Wynik:
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 END
Wynik:
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 END
Wejś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 end
Wynik:
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()
?