给定的输入串,输出该字符串与所有元音a
,e
,i
,o
和u
在随机彼此之间交换。
例如,在字符串中this is a test
,有4个元音:[i, i, a, e]
。这些元音的有效改组可能会[a, i, e, i]
产生输出thas is e tist
。
关于改组
如果我们认为相等的元音是不同的,则所有改组的可能性均相等。对于上面的示例,这24种混洗是可能的:
[i 1,i 2,a,e] [i 1,i 2,e,a] [i 1,a,i 2,e] [i 1,a,e,i 2 ] [i 1,e,i 2,a] [i 1,e,a,i 2 ] [i 2,i 1,a,e] [i 2,i 1,e,a] [i 2,a,i 1,e] [i 2,a,e,i 1 ] [i 2,e,i 1,a] [i 2,e,a,i 1 ] [a,i 1,i 2,e] [a,i 1,e,i 2 ] [a,i 2,i 1,e] [a,i 2,e,i 1 ] [a,e,i 1,i 2 ] [a,e,i 2,i 1 ] [e,i 1,i 2,a] [e,i 1,a,i 2 ] [e,i 2,i 1,a] [e,i 2,a,i 1 ] [e,a,i 1,i 2 ] [e,a,i 2,i 1 ]
每个人的可能性均应相同。
除非找到所有元音都位于正确位置的字符串,否则您不能尝试对整个字符串进行随机混洗。简而言之,如果输入为常数,则代码的运行时间应为常数。
输入和输出
您可以假定输入中的所有字母均为小写或大写。您可能还支持混合大小写,但这不会给您带来任何好处。
输入将始终由可打印的ASCII字符组成。输入中的所有字符都应在输出中,只有元音必须在周围乱洗,其他都不能。
输入可以为空。无法保证输入将包含至少一个元音或至少一个非元音。
您可以将来自的输入
STDIN
作为函数参数或类似的参数。您可以将输出打印到
STDOUT
,从函数返回它或类似的东西。
测试用例
第一行是给定的输入。第二行是可能的输出之一。
<empty string>
<empty string>
a
a
cwm
cwm
the quick brown fox jumps over the lazy dog.
tho qeuck brewn fax jumps ovir the lozy dog.
abcdefghijklmnopqrstuvwxyz
abcdefghujklmnipqrstovwxyz
programming puzzles & code golf
pregromming pezzlos & coda gulf
fatalize
fitaleza
martin ender
mirten ander
计分
这是打高尔夫球的代码,可能会使您不胜枚举。
y
作为元音,但是我说的最后一个挑战y
是元音,我被问到为什么选择了它!
y