La balbuzie è un problema che molti di noi potrebbero aver sperimentato o almeno visto. Sebbene la maggior parte dei famosi software di riconoscimento vocale abbia seri problemi con il parlare balbettato, immaginiamo un software che capisca la balbuzie, ma non riesca a risolverli e li scriva solo così com'è.
Un esempio di testo scritto da un software del genere può essere così: "per favore, stai attento" . In questo esempio "attento" è la parola originale e "ca ca" sono le parole balbettate.
Sfida
Scrivi un programma o una funzione che corregge le parole balbettate rimuovendole dall'input mantenendo le parole originali. Ad esempio, la versione fissa di "per favore fai attenzione" sarebbe "per favore fai attenzione" .
Questo è code-golf , la risposta più breve in ogni lingua vince!
Cosa sono le parole balbettate?
La balbuzie ha molte varianti diverse. Ma per semplicità di questa sfida, la limiteremo alle seguenti regole:
- Le parole disturbate possono essere una parte incompleta o l'intera parola originale. Per "parte incompleta" intendo che la parola originale dovrebbe iniziare esattamente con la parola balbettata. Ad esempio "ope" e "open" possono entrambi essere una parola balbettata per "open" , ma "pen" non può esserlo poiché "open" non inizia con "pen" .
- Le parole balbettate devono contenere almeno una delle vocali "aeiou" . Ad esempio "stella" può essere una parola balbettata per "inizio" in quanto contiene "a" , ma "st" non può essere una parola balbettata in quanto non contiene alcuna delle vocali menzionate.
- Le parole disturbate possono apparire solo prima della parola originale e devono essere ripetute almeno due volte per essere valide (la parola originale non conta nelle ripetizioni). Ad esempio "oo open" ha balbettato parole ma "o open o" no, perché la "o" dopo la parola originale non conta e "o" prima che la parola originale non venga ripetuta almeno due volte. "vai vai vai vai vai vai" ha cinque ripetizioni di parole balbettate prima della parola originale ed è valida.
- Un singolo insieme di parole ripetute balbettate non può contenere forme miste e le parole dovrebbero essere esattamente l'una come l'altra. Ad esempio "op o op open" non conta come parole balbettate. D'altra parte "o op op open" ha balbettato parole perché la prima "o" è vista come una parola completamente diversa qui e le due "op" sono contate come parole balbettate di "open" .
- Nel caso di più insiemi validi di parole ripetute balbettate l'una dopo l'altra, rimane solo l'ultima parola originale. Ad esempio, in "ooo op op op open" , la parte "oo o" è vista come parole balbettate della prima "op" , quindi dovrebbero essere rimosse e quindi "op op op" è visto come parole balbettate di "open " e dovrebbero essere rimossi anche, quindi solo " aperto " sarà lasciato dopo la rimozione di parole balbettate. Puoi presumere che più insiemi validi di ripetute parole balbettate avvengano solo da sinistra a destra, quindi la correzione di "op op ooo open" comporterebbe "op op open" (aka
Ingresso
- L'input è una stringa a riga singola contenente solo lettere inglesi ASCII (az), cifre (0-9) e spazi. Il maiuscolo non è importante e puoi decidere di accettare lettere minuscole o maiuscole o entrambe, ma il case dovrebbe rimanere lo stesso e non puoi modificarlo nell'output.
- È possibile utilizzare un elenco di lettere (come
["l","i","s","t"," ","o","f"," ","l","e","t","t","e","r","s"]) anziché la stringa, ma non è possibile utilizzare un elenco di parole. Se la tua lingua ha una struttura di input diversa, usala. Il punto è che l'input non dovrebbe essere separato da parole, quindi il costo di separazione delle parole in alcune lingue potrebbe effettivamente innescare altre soluzioni creative. - L'input potrebbe contenere nessuna, una o più parole balbettate al suo interno.
- Le parole e / o i numeri sono separati da un singolo spazio e l'input non conterrà spazi doppi uno accanto all'altro.
Produzione
- Una stringa o un elenco di lettere o la struttura appropriata nella tua lingua con tutte le parole balbettate rimosse dall'input.
- Le parole di output devono essere separate esattamente da uno spazio (uguale all'input).
- Sono consentiti la nuova riga o lo spazio iniziale e finale singolo.
Sono vietate le scappatoie standard .
Casi test
Nessuna parola balbettata:
"hello world" => "hello world"
Una singola istanza di parole ripetute balbettate:
"ope ope ope ope open the window" => "open the window"
Istanze multiple di parole ripetute balbettate:
"there is is is is something un un under the the the table" => "there is something under the table"
Nessuna parola balbettata, non abbastanza ripetuta:
"give me the the book" => "give me the the book"
Nessuna parola balbettata, non hanno nessuna delle vocali menzionate:
"h h help m m m me" => "h h help m m m me"
I numeri non sono parole balbettate, non hanno nessuna delle vocali menzionate:
"my nu nu number is 9 9 9 9876" => "my number is 9 9 9 9876"
Ma una parola con vocali e numeri può avere parole balbettate:
"my wi wi windows10 is slow" => "my windows10 is slow"
Diverse forme di parole balbettate nello stesso gruppo di ripetizione non vengono conteggiate:
"this is an ant antarctica does not have" => "this is an ant antarctica does not have"
Per più insiemi continui di parole balbettate, una dopo l'altra, mantieni solo l'ultima parola originale:
"what a be be be beauti beauti beautiful flower" => "what a beautiful flower"
Questo non è un caso di più insiemi continui di parole balbettate l'una dopo l'altra:
"drink wat wat wa wa water" => "drink wat wat water"
Ingresso vuoto:
"" => ""
Più casi dai commenti:
"a ab abc" => "a ab abc"
"a ab ab abc" => "a abc"
"ab ab abc abcd" => "abc abcd"
"a a ab a able" => "ab a able"
"i have ave ave average" => "i have average"
"my wi wi windows 10 is cra cra crap" => "my windows 10 is crap"
Un elenco facile da copiare dei casi di test sopra riportati:
"hello world",
"ope ope ope ope open the window",
"there is is is is something un un under the the the table",
"give me the the book",
"h h help m m m me",
"my nu nu number is 9 9 9 9876",
"my wi wi windows10 is slow",
"this is an ant antarctica does not have",
"what a be be be beauti beauti beautiful flower",
"drink wat wat wa wa water",
"",
"a ab abc",
"a ab ab abc",
"ab ab abc abcd",
"a a ab a able",
"i have ave ave average",
"my wi wi windows 10 is cra cra crap"
"drink wat wat wa wa water" => "drink wat wat water"sembra davvero che la regola dovrebbe applicarsi in modo ricorsivo in modo che diventi "bere acqua"