任务描述
有时,您确实需要在很小的空间里容纳正在写的东西。可能会很想丢元音和其他内容,但如果失败了,谁真正需要空格?谢谢!†
编写一个函数或程序,该函数或程序除去小写的元音aeiou
,然后除去空格,然后除去输入字符串中的所有字符。此外,每次删除字符时,它必须是最有资格删除的字符。它必须重复此过程,直到字符串不超过给定的输入长度为止。
†“这完全可读!”但是,如果您正在阅读此脚注,则可能不是,真的... :)
例子
在这里,您可以看到此过程适用于连续较小的输入大小:
23: Hello, Code Golf World!
22: Hello, Code Golf Wrld!
21: Hello, Code Glf Wrld!
20: Hello, Cod Glf Wrld!
19: Hello, Cd Glf Wrld!
18: Hell, Cd Glf Wrld!
17: Hll, Cd Glf Wrld!
16: Hll, Cd GlfWrld!
15: Hll, CdGlfWrld!
14: Hll,CdGlfWrld!
13: Hll,CdGlfWrld
12: Hll,CdGlfWrl
11: Hll,CdGlfWr
(etc.)
将字符串压缩到17个字符后,我们用完了元音以进行删除,因此我们删除的下一个字符是最右边的空格;当我们击中14个字符时,我们删除了所有的元音和空格,因此我们只需要从右到左开始用力嚼字符串。
以下是一些伪代码的 Python代码可以解决此难题:
def crunch_string(string, to_length):
while len(string) > to_length:
# Store the best candidate index for deletion here.
best = None
# First, find the rightmost vowel's index.
for i in range(len(string)):
if string[i] in 'aeiou':
best = i
# If there were no vowels, find the rightmost space's index.
if best is None:
for i in range(len(string)):
if string[i] == ' ':
best = i
# If there were no spaces either, use the final index.
if best is None:
best = len(string) - 1
# Remove the selected character from the string.
string = string[:best] + string[best + 1:]
# Return the string once `len(string) <= to_length`.
return string
规则
这是code-golf,因此以字节为单位的最短代码获胜。
输入字符串将由可打印的ASCII字符组成,从空格(
,十进制32)到代字号(
~
,十进制126)并包括在内。AEIOU
字符串中将没有大写元音。特别是,不会涉及Unicode,制表符或换行符。调用输入字符串s和输入目标长度t。这样就保证了0 <t≤length(s)≤10000。(特别是,输入字符串永远不会为空。如果t = length(s),则应只返回未修改的字符串。)
测试用例
Input: 50, Duis commodo scelerisque ex, ac consectetur metus rhoncus.
Output: Duis commodo scelerisque ex, ac cnscttr mts rhncs.
Input: 20, Maecenas tincidunt dictum nunc id facilisis.
Output: Mcnstncdntdctmnncdfc
Input: 150, golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf
Output: glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glfglfglfglfglfglfglfglfglfglf
aeiou
是元音AEIOU
,为了简单起见,不会出现。(整个大写/小写字母不是我想要关注的。)我添加了说明。
w
(例如,在单词co w中w
是元音!)当然,这已经解决了,但是对于没有说明元音的集合是的情况aeiou
,您有时应该包含y
和w
。:-O
for index, char in enumerate(string)
而不是range(len(str))
构造
y
元音吗?