首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修正我口吃的话语

修正我口吃的话语
EN

Code Golf用户
提问于 2019-09-19 15:43:56
回答 2查看 556关注 0票数 12

口吃是我们中许多人可能经历过或至少已经看到的问题。虽然大多数著名的语音识别软件都有严重的口吃问题,但让我们想象一下,有一个软件能够理解口吃,但不能修复,只能按原样编写。

这样一个软件编写的例子可以是这样的:“请小心”。在这个例子中,“小心”是原始单词," ca“是结巴词。

挑战

编写一个程序或函数,通过从输入中删除口吃单词来修复口吃单词,同时保留原始单词。例如,固定版本的“请小心”将是“请小心”。

这是密码-高尔夫,最短的答案在每种语言中获胜!

口吃词是什么?

口吃有许多不同的变化。但为了简化这一挑战,我们将把它限制在以下规则上:

  • 结巴词可以是原始单词的一个未完成的部分或整体。我所说的“未完成部分”的意思是,最初的单词应该以结巴词开始。例如,"ope“和"open”都可以是"open“的结巴词,但"pen”不能是"pen“,因为"open”不是以“pen”开头的。
  • 口吃词必须至少包含一个"aeiou“元音。例如,"star“可以是"start”的结巴词,因为它包含"a",但是"st“不能是结巴词,因为它不包含任何提到的元音。
  • 口吃词只能出现在原始单词之前,并且应该至少重复两次才能有效(原来的单词在重复中不算在内)。例如,"o o open“有结巴的单词,但o open o没有,因为原始单词后面的"o”不算,而原始单词之前的"o“至少没有重复两次。"go go“在原始单词之前有五个重复的结巴词,并且是有效的。
  • 一组重复的口吃词不可能包含混合的形式,这些词应该完全相同。例如,“open”不算作结巴词。另一方面,“op op open”结结巴巴地说了一些话,因为第一个"o“在这里被看作是一个完全不同的词,而两个"op"s则被认为是”公开“的结巴词。
  • 在多个有效的重复结巴词集的情况下,只保留最后一个原始单词。例如,在"o op open“中,"o o”部分被视为第一个" op“中的结巴词,因此应该删除"op op”,然后将“op op”看作是"open“的结巴词,也应该将其移除,因此,在删除口吃词之后,只会留下"open”。您可以假设多组重复口吃单词的有效集合只会从左到右发生,因此修复"op o open“将导致”open“(即a)。我们不会在修复一次之后再修复)。

输入

  • 输入是一个单行字符串,只包含ASCII英文字母( and )、数字(0-9)和空格字符。字母大小写并不重要,您可以决定接受小写或大写,或者两者兼而有之,但大小写应该保持不变,不能在输出中更改。
  • 您可以使用字母列表(如["l","i","s","t"," ","o","f"," ","l","e","t","t","e","r","s"])代替字符串,但不能使用单词列表。如果您的语言有不同的输入结构,请使用它。关键是输入不应该被单词分开,所以在某些语言中分离单词的成本实际上可能会触发其他创造性的解决方案。
  • 输入中可能包含无、一个或多个结结巴巴的单词。
  • 单词和或数字是由单个空格分隔的,输入将不包含相邻的双空格。

输出

  • 在您的语言中,一个字符串、一个字母列表或适当的结构,从输入中删除所有口吃单词。
  • 输出单词应该用一个空格隔开(与输入相同)。
  • 允许单前导和尾随换行符或空格。

标准漏洞是禁止的。

测试用例

不要结结巴巴的说:

代码语言:javascript
复制
"hello world" => "hello world"

重复口吃的一个例子:

代码语言:javascript
复制
"ope ope ope ope open the window" => "open the window"

多次重复口吃的例子:

代码语言:javascript
复制
"there is is is is something un un under the the the table" => "there is something under the table"

没有结巴的话,也没有足够的重复:

代码语言:javascript
复制
"give me the the book" => "give me the the book"

没有结巴的词,没有提到的元音:

代码语言:javascript
复制
"h h help m m m me" => "h h help m m m me"

数字不是结巴词,它们没有提到的元音:

代码语言:javascript
复制
"my nu nu number is 9 9 9 9876" => "my number is 9 9 9 9876"

但是一个兼有元音和数字的单词可能会结结巴巴的:

代码语言:javascript
复制
"my wi wi windows10 is slow" => "my windows10 is slow"

同一重复组中不同形式的口吃词不算在内:

代码语言:javascript
复制
"this is an ant antarctica does not have" => "this is an ant antarctica does not have"

对于多个连续的结巴词集,只保留最后一个原始单词:

代码语言:javascript
复制
"what a be be be beauti beauti beautiful flower" => "what a beautiful flower"

这不是一个多个连续的口吃词集的情况,就在彼此之后:

代码语言:javascript
复制
"drink wat wat wa wa water" => "drink wat wat water"

空输入:

代码语言:javascript
复制
"" => ""

评论中的更多案例:

代码语言:javascript
复制
"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"

一个容易复制上述测试用例的列表:

代码语言:javascript
复制
"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"
EN

回答 2

Code Golf用户

发布于 2019-09-19 16:41:43

Perl 5 (-p),34字节

根据Arnauld删除的答案。

代码语言:javascript
复制
s/(\b(\w*[aeiou]\w*) )\1+(?=\2)//g

在网上试试!

票数 4
EN

Code Golf用户

发布于 2019-09-20 20:54:48

斯塔克斯,26 字节数

代码语言:javascript
复制
å╬↓<▀.₧▀"╦n▐∞↨vß%ù:Qa3@=↔_

运行并调试它

直接从@Grimy的perl应答端口。Stax能够缩小regex模式的文字,并且它有一个元音常量,可以收缩[aeiou]

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/193196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档