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 bbb
diventaaaa, bbb
.A
^COLON
è una virgola che sembra:
.A
^SEMICOLON
è una virgola che sembra;
.A
^PERIOD
è una virgola che sembra.
. La parola che segue a^PERIOD
deve 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^OPENQUOTE
deve essere in maiuscolo. Se un^OPENQUOTE
è preceduto da una Parola che non è Punteggiatura, aggiungi una^COMMA
tra quella parola e la^OPENQUOTE
. Se una^OPENQUOTE
è preceduta da una punteggiatura che rende maiuscola la parola successiva, questa passa^OPENQUOTE
alla parola successiva.A
^CLOSEQUOTE
è il digrafo,"
che ha uno spazio che segue ma non precedente. Se una^CLOSEQUOTE
è preceduta da una^COMMA
,^PERIOD
o^BANG
, che punteggiatura scompare e la^CLOSEQUOTE
si 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 ^COMMA
o^SEMICOLON ^CLOSEQUOTE
o^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 ^BANG
Produzione:
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 END
Produzione:
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
Ingresso:
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
Produzione:
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()
?