Sei stato assunto per scrivere del codice per un'app di dettatura, che prende l'input vocale da una fonte parlata, lo analizza come parole e lo scrive su uno schermo.
La direzione non si fida davvero di te con tutto quel potere nel progetto - sei noto di stare seduto a giocare a golf code tutto il giorno invece di fare il tuo lavoro, sfortunatamente - quindi ti danno solo un compito davvero semplice da eseguire: trasformare un Frase con punteggiatura intervallata in una frase correttamente formattata, dove "formattato correttamente" è definito di seguito.
La frase è la stringa di input. Una parola è un gruppo di caratteri contrapposti non spaziali. Una punteggiatura è una parola il cui primo carattere è
^.Una parola è maiuscola se la prima lettera della parola non è una lettera minuscola (le parole maiuscole corrispondono alla regex
/[^a-z].*/).La prima parola della frase deve essere in maiuscolo.
A
^COMMAè il carattere virgola,e ha uno spazio che segue ma non precedente.aaa ^COMMA bbbdiventaaaa, bbb.A
^COLONè una virgola che sembra:.A
^SEMICOLONè una virgola che sembra;.A
^PERIODè una virgola che sembra.. La parola che segue a^PERIODdeve essere in maiuscolo.A
^BANGè un periodo che sembra!.A
^DASHè il carattere trattino-e ha uno spazio sia precedente che successivo.A
^HYPHENè anche il carattere trattino-ma non ha spazio che segue o precede.An
^EMDASHè un trattino (non un trattino!) Che si scrive--.An
^OPENQUOTEè un carattere di citazione"che ha uno spazio che precede ma non segue. La parola che segue a^OPENQUOTEdeve essere in maiuscolo. Se un^OPENQUOTEè preceduto da una Parola che non è Punteggiatura, aggiungi una^COMMAtra quella parola e la^OPENQUOTE. Se una^OPENQUOTEè preceduta da una punteggiatura che rende maiuscola la parola successiva, questa passa^OPENQUOTEalla parola successiva.A
^CLOSEQUOTEè il digrafo,"che ha uno spazio che segue ma non precedente. Se una^CLOSEQUOTEè preceduta da una^COMMA,^PERIODo^BANG, che punteggiatura scompare e la^CLOSEQUOTEsi scrive,",."o!", rispettivamente. Se la punteggiatura che scompare specificava una maiuscola, quella maiuscola deve ancora avvenire sulla successiva parola disponibile.Gli spazi iniziali o finali del risultato finale completo devono essere rimossi e qualsiasi stringa di due o più spazi di una riga deve essere compressa in un singolo carattere di spazio.
Ogni caso non descritti sopra (es
^COMMA ^COMMAo^SEMICOLON ^CLOSEQUOTEo^UNDEFINEDPUNCTUATION) non avviene nello ingresso ben formato ed è quindi un comportamento indefinito.
Il team di sviluppo ti informa di quanto segue:
Il progetto è stato scritto nella lingua [la tua lingua qui] e dovrebbe essere il più breve possibile in modo da occupare il minor spazio possibile quando si tratta di un'app per Android / iPhone. Cerchi di spiegare che non è così che funziona lo sviluppo di app, ma non ascoltano. Ma hey, che coincidenza! Sei un golfista straordinario nella [tua lingua qui] !
L'app non avrà autorizzazioni di accesso al web e non ci saranno librerie installate che eseguono questa formattazione per te. Probabilmente puoi convincere il team a consentirti di avere una libreria regex se ne esiste una per la tua lingua, se pensi di averne bisogno.
Il supporto per le citazioni nidificate che utilizzano correttamente le virgolette doppie / singole è pianificato per una versione successiva dell'app, ma non per la versione su cui stai lavorando ora, quindi non preoccuparti.
Il management è un grande fan dello sviluppo test-driven, e quindi il team di sviluppo ha già avuto una scimmia tastiera sfortunata scrivere alcuni test per la tua parte del programma: (nuove righe aggiunte per la leggibilità, trattale come spazi)
Ingresso:
hello ^COMMA world ^BANGProduzione:
Hello, world!Ingresso:
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 ENDProduzione:
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 ENDIngresso:
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 endProduzione:
Begin a. B, c: d; e! F-g - h--i, "j. "K; "l," m!" N. 0x6C6F6C end
Questo è un codice golf: vince il punteggio più basso. È possibile scrivere una funzione di un argomento stringa o un programma che legge da STDIN e che scrive su STDOUT.
prompt()?