口吃是我们许多人可能已经经历或至少看到的问题。尽管大多数著名的语音识别软件都存在口吃的严重问题,但让我们想象一下一种软件,该软件可以理解口吃但无法修复口吃,只能照原样编写。
用这样的软件编写的示例文字可能是这样的:“请小心”。在此示例中,“小心”是原始单词,“ ca ca”是断断续续的单词。
挑战
编写一个程序或函数,通过保留输入中的原始单词,通过从输入中删除它们来修正出现的单词。例如,“请小心”的固定版本将是“请小心”。
这是代码高尔夫,每种语言的最短答案胜出!
什么是口吃的单词?
口吃有许多不同的变化。但是为了简化此挑战,我们将其限制为以下规则:
- 口吃的单词可能是原始单词的未完成部分或全部。所谓“未完成的部分”,是指原始单词应完全以口吃单词开头。例如“OPE”和“开放”既可以是一个结巴字的“开放”,但“笔”不能因为一个“开放”不是以“笔”。
- 口吃的单词必须至少包含一个“ aeiou”元音。例如,“ star”可以是“ start”的口吃词,因为它包含“ a”,但是“ st”不能是口吃的词,因为它不包含任何上述元音。
- 口吃的单词只能出现在原始单词之前,应重复至少两次才能有效(原始单词不计入重复中)。例如,“ oo open”具有口吃的单词,但没有“ o open o”,因为原始单词之后的“ o”不计算在内,原始单词之前的“ o”没有重复至少两次。“ go go go go go go go”在原始单词之前有五个重复的口吃单词,并且有效。
- 一组重复的口吃单词不能包含混合形式,并且单词应该彼此完全相同。例如,“ op o op open”不算作口吃的单词。另一方面,“ o op op open”具有口吃单词,因为在这里第一个“ o”被视为一个完全不同的单词,而两个“ op”被视为“ open”的口吃单词。
- 如果有多个有效的重复设置的紧接单词,则仅保留最后一个原始单词。例如,在“ ooo op op op open”中,“ oo o”部分被视为第一个“ op”的口吃单词,因此应将其删除,然后将“ op op op”视为“ open”的口吃单词。”,也应将其删除,因此在删除口吃的单词后仅保留“ open”字样。您可以假设多个有效的重复口吃单词集仅从左到右发生,因此修复“ op op ooo open”将导致“ op op open”(aka
输入值
- 输入是仅包含ASCII英文字母(az),数字(0-9)和空格字符的单行字符串。字母大小写并不重要,您可以决定接受小写或大写字母或两者都接受,但是大写字母应保持不变,并且不能在输出中进行更改。
- 您可以使用字母列表(例如
["l","i","s","t"," ","o","f"," ","l","e","t","t","e","r","s"]
)代替字符串,但是不能使用单词列表。如果您的语言具有不同的输入结构,请使用它。关键是输入不应该用单词分隔,因此以某些语言分隔单词的成本实际上可能会触发其他创造性的解决方案。 - 输入中可能不包含任何一个或多个口吃的单词。
- 单词和/或数字用单个空格分隔,输入将不包含彼此相邻的双精度空格。
输出量
- 字符串或字母列表或您语言中的适当结构,其中所有卡住的单词已从输入中删除。
- 输出字应精确隔开一个空格(与输入相同)。
- 允许使用单个前导和尾随的换行符或空格。
禁止出现标准漏洞。
测试用例
没有口吃的话:
"hello world" => "hello world"
重复口吃单词的一个实例:
"ope ope ope ope open the window" => "open the window"
重复口吃单词的多个实例:
"there is is is is something un un under the the the table" => "there is something under the table"
没有口吃的话,没有足够的重复:
"give me the the book" => "give me the the book"
没有口吃的单词,没有任何上述元音:
"h h help m m m me" => "h h help m m m me"
数字不是口吃的单词,它们没有任何上述元音:
"my nu nu number is 9 9 9 9876" => "my number is 9 9 9 9876"
但是一个带有元音和数字的单词可能会结结巴巴的单词:
"my wi wi windows10 is slow" => "my windows10 is slow"
同一重复组中不同形式的口吃单词不计算在内:
"this is an ant antarctica does not have" => "this is an ant antarctica does not have"
对于紧接在一起的多个连续的口吃单词,仅保留最后一个原始单词:
"what a be be be beauti beauti beautiful flower" => "what a beautiful flower"
这不是紧接在后的多个连续的套结单词的情况:
"drink wat wat wa wa water" => "drink wat wat water"
空输入:
"" => ""
来自评论的更多案例:
"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"
易于复制的上述测试用例列表:
"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"
似乎确实应该以递归方式应用该规则,以使其成为“饮用水”