Le bégaiement est un problème que beaucoup d'entre nous ont peut-être connu ou du moins vu. Bien que la plupart des logiciels de reconnaissance vocale connus aient de graves problèmes avec la parole bégayée, imaginons un logiciel qui comprend le bégaiement, mais ne peut pas les corriger et les écrit uniquement tels quels.
Un exemple de texte écrit par un tel logiciel peut ressembler à ceci: "veuillez faire attention ca ca" . Dans cet exemple, "attention" est le mot d'origine et "ca ca" sont les mots bégayés.
Défi
Écrivez un programme ou une fonction qui corrige les mots bégayés en les supprimant de l'entrée tout en conservant les mots d'origine. Par exemple, la version fixe de "s'il vous plaît soyez prudent" serait "s'il vous plaît soyez prudent" .
C'est le code-golf , la réponse la plus courte dans toutes les langues gagne!
Que sont les mots bégayés?
Le bégaiement a de nombreuses variantes différentes. Mais pour simplifier ce défi, nous allons le limiter aux règles suivantes:
- Les mots bégayés peuvent être une partie incomplète ou la totalité du mot d'origine. Par «partie inachevée», je veux dire que le mot d'origine doit commencer exactement par le mot bégayé. Par exemple, "ope" et "open" peuvent tous deux être un mot bégayé pour "open" , mais "pen" ne peut pas en être un car "open" ne commence pas par "pen" .
- Les mots bégayés doivent contenir au moins une des voyelles "aeiou" . Par exemple, "star" peut être un mot bégayé pour "start" car il contient "a" , mais "st" ne peut pas être un mot bégayé car il ne contient aucune des voyelles mentionnées.
- Les mots bégayés ne peuvent apparaître qu'avant le mot d'origine et doivent être répétés au moins deux fois pour être valides (le mot d'origine ne compte pas dans les répétitions). Par exemple, "oo open" a des mots bégayés mais "o open o" ne le fait pas, car le "o" après le mot d'origine ne compte pas et "o" avant le mot d'origine n'est pas répété au moins deux fois. "go go go go go go" a cinq répétitions de mots bégayés avant le mot d'origine et est valide.
- Un seul ensemble de mots bégayés répétés ne peut pas contenir de formes mixtes et les mots doivent être exactement comme les uns des autres. Par exemple, "op o op open" ne compte pas comme des mots bégayés. D'un autre côté, "o op op open" a des mots bégayés parce que le premier "o" est vu ici comme un tout autre mot et les deux "op" sont comptés comme des mots bégayés "open" .
- Dans le cas de plusieurs ensembles valides de mots bégayés répétés juste après l'autre, seul le dernier mot original reste. Par exemple, dans "ooo op op op open" , la partie "oo o" est considérée comme des mots bégayés du premier "op" , ils doivent donc être supprimés, puis "op op op" est considéré comme des mots bégayés de "open" " et ils doivent également être supprimés, de sorte que seul " ouvert " sera laissé après la suppression des mots bégayés. Vous pouvez supposer que plusieurs ensembles valides de mots bégayés répétés ne se produisent que de gauche à droite, donc la fixation de "op op ooo open" entraînerait "op op open" (aka
Contribution
- L'entrée est une chaîne d'une seule ligne contenant uniquement des lettres anglaises ASCII (az), des chiffres (0-9) et des caractères d'espacement. La casse des lettres n'est pas importante et vous pouvez décider d'accepter les minuscules ou les majuscules ou les deux, mais la casse doit rester la même et vous ne pouvez pas la modifier dans la sortie.
- Vous pouvez utiliser une liste de lettres (comme
["l","i","s","t"," ","o","f"," ","l","e","t","t","e","r","s"]
) au lieu de la chaîne, mais vous ne pouvez pas utiliser une liste de mots. Si votre langue a une structure d'entrée différente, utilisez-la. Le fait est que la saisie ne doit pas être séparée par des mots, donc le coût de la séparation des mots dans certaines langues pourrait en fait déclencher d'autres solutions créatives. - L'entrée peut contenir aucun, un ou plusieurs mots bégayés.
- Les mots et ou les nombres sont séparés par un seul espace et l'entrée ne contiendra pas de doubles espaces les uns à côté des autres.
Production
- Une chaîne ou une liste de lettres ou la structure appropriée dans votre langue avec tous les mots bégayés supprimés de l'entrée.
- Les mots de sortie doivent être séparés par exactement un espace (identique à l'entrée).
- Une nouvelle ligne ou un seul espace de début et de fin est autorisé.
Les failles standard sont interdites.
Cas de test
Pas de mots bégayés:
"hello world" => "hello world"
Une seule occurrence de mots bégayés répétés:
"ope ope ope ope open the window" => "open the window"
Plusieurs instances de mots bégayés répétés:
"there is is is is something un un under the the the table" => "there is something under the table"
Pas de mots bégayés, pas assez répétés:
"give me the the book" => "give me the the book"
Pas de mots bégayés, pas de voyelles mentionnées:
"h h help m m m me" => "h h help m m m me"
Les chiffres ne sont pas des mots bégayés, ils n'ont aucune des voyelles mentionnées:
"my nu nu number is 9 9 9 9876" => "my number is 9 9 9 9876"
Mais un mot avec des voyelles et des chiffres peut avoir des mots bégayés:
"my wi wi windows10 is slow" => "my windows10 is slow"
Différentes formes de mots bégayés dans le même groupe de répétition ne sont pas comptées:
"this is an ant antarctica does not have" => "this is an ant antarctica does not have"
Pour plusieurs ensembles continus de mots bégayés l'un après l'autre, ne conservez que le dernier mot original:
"what a be be be beauti beauti beautiful flower" => "what a beautiful flower"
Ce n'est pas le cas de plusieurs ensembles continus de mots bégayés l'un après l'autre:
"drink wat wat wa wa water" => "drink wat wat water"
Entrée vide:
"" => ""
Plus de cas de commentaires:
"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"
Une liste facile à copier des cas de test ci-dessus:
"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"
il semble vraiment que la règle devrait s'appliquer de manière récursive pour que cela devienne "boire de l'eau"