产生一个发音单词


16

挑战很简单:

产生一个单词。

规格:

  • 单词必须是可发音的。
    • 这被定义为“在辅音和元音之间交替”。
    • 辅音是以下字母之一: bcdfghjklmnpqrstvwxz
    • 元音是以下字母之一: aeiouy
  • 单词必须随机生成。
  • 单词必须能够包含所有辅音和元音。(您不能只bcdf用于辅音和aei元音。)
  • 单词必须包含10个字母。
  • 最短的代码(以字符数计)获胜。


7
有了这个XKCD条记,该方案echo buxitiwymu在技术上符合规范。我向你保证,我随机生成了这个词:P
AardvarkSoup

1
@AardvarkSoup“单词必须能够包含所有辅音和元音”
Doorknob

1
@Kartik取决于上下文,在“是”中它是一个辅音,在“为什么中”它是一个元音,但是这将不可能定义一个可发音的单词,例如在元音和辅音之间交替。yyyyyyyy是一个有效的词。
CJStuart

1
实际上我前一段时间在Scratch上制作了一个发电机。对于何时可以y当成元音,可以在何处使用qx以及何时可以使用两个字母的组合(例如ng或),它具有特定的规则ea
Esolanging Fruit

Answers:



8

Ruby:56个字符

([v=%w(a e i o u y),[*?a..?z]-v]*5).map{|a|$><<a.sample}

输出示例:

  • 慢跑
  • 乌姆普约吉姆
  • 伊帕戈杜萨斯
  • yfoqinifyw
  • 埃比利波迪兹

1
'aeiouy'.chars会短一个字符。
霍华德

@Howard然后减法运算符加注TypeError: can't convert Enumerator into Array
John Dvorak

@JanDvorak对不起,忘了提到您需要Ruby 2.0才能实现此技巧。
霍华德

7

Python,81岁

from random import*
print''.join(map(choice,["bcdfghjklmnpqrstvwxz","aeiouy"]*5))

祝他们好运。


它们实际上很容易发音,例如,我得到的第一个单词是“ viketuziwo”:P
Doorknob

@Doorknob也许这只是我的运气。我不断收到“ qijepyjyga”之类的“单词”。我的计算机尝试通过发音进行弥补:)
grc

3
python grc.py | say在机器上玩得很开心。谢谢你的主意。
2013年

7

COBOL,255

所以我现在正在学习COBOL。将此问题用作一些练习。尝试打高尔夫球。

没有前导空格的是255,有前导空格的是286个字节。

对于它的价值,它可以在VS2012的Microfocus COBOL中运行,我不知道它是否可以在其他任何地方运行。

       1 l pic 99 1 s pic x(26) value'aeiouybcdfghjklmnpqrstvwxz' 1 r
       pic 99 1 v pic 9 1 q pic 99. accept q perform test after varying
       l from 1 by 1 until l>9 compute v=function mod(l,2) compute r=1+
       function random(q*l)*5+v*15+v*5 display s(r:1)end-perform exit


6

JavaScript的74

for(a=b=[];a++-5;)b+="bcdfghjklmnpqrstvwxz"[c=new Date*a%20]+"aeiouy"[c%6]

不会生成所有组合,但是我认为所有辅音和元音都会出现。

JavaScript,79

for(a=b=[];a--+5;)b+="bcdfghjklmnpqrstvwxz"[c=Math.random()*20^0]+"aeiouy"[c%6]

更多“随机”版本。


有什么^0
2013年

1
@Alpha Math.random给出一个浮点数,我们需要一个整数。^0截断数字
复制

聪明的把戏。我以前从未见过^JavaScript运算符,也很少听说过使用它来截断float的情况。谢谢!
2013年

@copy我喜欢使用^
Math chiller

4

Ruby:70 66个字符

10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}

样品运行:

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
izogoreroz

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
onewijolen

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
amilyfilil

您可以10.times少用一个字符。
2013年

1
同样的问题不要求每个字母必须具有相同的概率。*10-> *4,跳过*3rand 60-> rand 20,您已经保存了3个字符。
霍华德2013年

很好,@ Howard。谢谢。
manatwork 2013年

4

R:105个字符

a=c(1,5,9,15,21,25)
l=letters
s=sample
cat(apply(cbind(s(l[-a],5),s(l[a],5)),1,paste,collapse=""),sep="")


4

处理中,100 99 93 87

int i=10;while(i-->0)"aeiouybcdfghjklmnpqrstvwxz".charAt((int)random(i%2*6,6+i%2*i*2));

在仔细检查问题后,我发现它不需要任何输出。我已经对此进行了调整。


3

物镜-C,129

main(){int i=10;while(i-->0)printf("%c",[(i%2==0)?@"aeiouy":@"bcdfghjklmnpqrstvwxz"characterAtIndex:arc4random()%(6+(i%2)*14)]);}

在Daniero的帮助下

(我喜欢使用趋于运算符(->)


3

Java AKA是有史以来最冗长的语言,在 Doorknob,Daniero和Peter Taylor的帮助下,共有176种语言(谢谢大家!)

class w{public static void main(String[]a){int i=11;while(--i>0)System.out.print((i%2==0?"aeiouy":"bcdfghjklmnpqrstvwxz").charAt(new java.util.Random().nextInt(6+(i%2)*14)));}}

取消高尔夫:

    class w {

        public static void main(String[] a) {
            int i = 11;
            while (--i > 0) {
                System.out.print((i % 2 == 0 ? "aeiouy" : "bcdfghjklmnpqrstvwxz").charAt(new java.util.Random().nextInt(6 + (i % 2) * 14)));
            }
     }

}


1
建议的改进:更改String a[]String[]a(-1个字符),更改w W = new w();w W=new w();(-2个字符)
门把手

建议:让单词始终以辅音(或摆动)开头;当问题没有提及时,无需将其随机化!因此,跳过布尔值fi%2改为使用。另外,for可以缩短循环,可以将两个字符串都放在条件运算符中(也不需要在此处使用括号),并charAt在外部使用。这是整件事,195个import java.util.*;class w{public static void main(String[]a){Random r=new Random();for(int i=0;++i<11;)System.out.print((i%2>0?"bcdfghjklmnpqrstvwxz":"aeiouy").charAt(r.nextInt(6+(i%2)*14)));}}
CHARS

2
“ Java AKA是有史以来最冗长的语言” –曾尝试莎士比亚吗?;-)
manatwork 2013年

1
@manatwork,一旦确定要在一个地方使用导入,别忘了删除导入。
彼得·泰勒

1
@manatwork也许我们喜欢lisp?好,对不起,我下班回家时要去掉那些括号
jsedano 2013年

3

Javascript,85

for(r=Math.random,s="",i=5;i--;)s+="bcdfghjklmnpqrstvwxz"[20*r()|0]+"aeiouy"[6*r()|0]

如果从控制台运行,则显示输出。显式显示将添加alert(s) 8个字符,仍然比其他JS解决方案短。

感谢C5H8NNaO4和Howard!


不错,删除最后一个';'来保存字符
C5H8NNaO4

1
而不是~~(###)您可以编写###|0,这样可以节省4个字符。
霍华德

3

Javascript,135 122 96 86个字符

s='';c=5;r=Math.random;while(c--)s+='bcdfghjklmnpqrstvwxz'[r()*20|0]+'aeiouy'[r()*6|0]


3

Unix工具:73个字节

而且不能保证运行时间:)

</dev/urandom grep -ao '[aeiouy][bcdfghjklmnpqrstvwxz]'|head -5|paste -sd ''

唯一的问题是,生成的字符串每次都会以“元音”开头。

(编辑:更改 ' '''粘贴的参数)(另一个编辑:由于manatwork,从grep选项中删除了-P )


可以对grep参数进行一些微调。我得到了“ ap ak ak”。
manatwork'2

嗯...很奇怪。我什么都不是。我认为-a就足够了。
pgy 2015年

1
我的测试表明-P就是这样。这位男子似乎警告其高度实验性的状态是有原因的。(grep2.16)但是,无论如何,它都可以正常工作-P
manatwork'2

你是对的,谢谢,我没有考虑。我什至不知道为什么我-P首先使用。我将编辑答案。
pgy 2015年

1
顺便说一句,tr -d \\n连接线较短。
manatwork 2015年

3

Pyth,26个字符

J-G"aeiouy"VT=k+kOJ=J-GJ;k

您可以在此处的在线编译器中尝试。

有人发布了一个非常类似的挑战,但是在我提出解决方案后就关闭了。我没有意识到,但是这个问题实际上早于Pyth的创建。无论如何,这是细分:

J                             Set string J equal to:
  G                            the entire alphabet (lowercase, in order)
 - "aeiouy"                    minus the vowels
           VT                 For n in range(1, 10):
             =k                   Set string k to:
                k                  k (defaults to empty string)
               + OJ                plus a random character from J
                   =J             Set J to:
                      G            the entire alphabet
                     - J           minus J
                        ;     End of loop
                         k    print k

每次运行循环时,J都会从辅音列表切换为元音列表。这样,我们每次都可以从J中随机选择一个字母。
可能有一种方法可以在循环中初始化J或从循环中删除显式分配,但是我还没有成功。


1
普遍认为解决老问题是可以的。但是,当您使用的语言比问题更新颖时(我在2014年创建了Pyth),您应该在回答中加以说明。
isaacg

感谢您为我解决问题。我没有意识到Pyth是在此问题之后创建的,因此已将其添加到答案中。
Mike Bufardeci,2015年

3

杀伤人员地雷 30 26

,('EIOUY'∪⎕A)[6(|,+)⍪5?20]

说明与下面的过去版本非常相似,只是重新排列了一下解决方案。

注意:⎕IO设置为0


('EIOUY'∪⎕A)[,6(|,(⍪+))5?20]

说明:

'EIOUY'∪⎕A    puts vowels in front of all letters.
5?20            for the indexes we start choosing 5 random numbers between 0 and 19
6(|,(⍪+))        then we sum 6 and the random numbers, convert to 5x1 matrix (⍪), add a column before this one containing 6 modulo the random numbers. 
                [[[ this one can be rewritten as: (6|n) , ⍪(6+n)  for easier understanding]]]
,6(|,(⍪+))5?20  the leading comma just converts the matrix to a vector, mixing the vowel and consonants indexes.

Tryapl.org


1
('AEIOUY'∪⎕A) ≡ (∪'AEIOUY',⎕A)但要短一个字节。
lstefano

1
延期'A' ⎕A保存另一个字节:,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
2013年

真好!下降到26。谢谢
Moris Zucca

2

PHP 79字节

<?for($c=bcdfghjklmnpqrstvwxz,$v=aeiouy;5>$i++;)echo$c[rand()%20],$v[rand()%6];

相当简洁。


2

C:101

main(){int x=5;while(x-->0){putchar("bcdfghjklmnpqrstvwxyz"[rand()%21]);putchar("aeiou"[rand()%5]);}}

2

Javascript 104 87

a="";for(e=10;e--;)a+=(b=e&1?"bcdfghjklmnpqrstvwxz":"aeiouy")[0|Math.random()*b.length]

golfed一大堆简单不必要的东西,还没有那么漂亮的copys'一

哦,那个刚打高尔夫球的人选择了“ dydudelidu”

现在,我尝试一次使用2个字符的方法。事实证明,它几乎与副本的第二个相同,所以我也无法数数,也就是79。 a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]


2

Brachylog,9个字节

Ḍ;Ẉṣᵐzh₅c

在线尝试!

通过输出变量以字母列表形式输出。

   ṣ         Randomly shuffle
 ;  ᵐ        both
Ḍ            the consonants without y
  Ẉ          and the vowels with y,
     z       zip them into pairs,
      h₅     take the first five pairs,
             and output
        c    their concatenation.

1

F#,166个字符

open System;String.Join("",(Random(),"aeiouybcdfghjklmnpqrstvwxz")|>(fun(r,s)->[0..5]|>List.collect(fun t->[s.Substring(6+r.Next()%20,1);s.Substring(r.Next()%6,1)])))

1

K,40个字节

,/+5?/:("bcdfghjklmnpqrstvwxz";"aeiouy")

5?"abc" 将根据给定的字符串生成5个随机字母。

5?/: 将从右侧的每个字符串中产生5个随机字母,产生两个列表。

+ 对这两个列表进行转置,为我们提供了一个元组列表,其中第一个列表具有一个随机字符,第二个列表具有一个随机字符。

,/ 是“疯狂”-按顺序将所有这些元组融合在一起。

K5可以更巧妙地构建字母,然后使用“ except”(^)删除元音,从而以33个字节的形式执行此操作,但是K5太新了,因此在这个问题上不合法:

,/+5?/:((`c$97+!26)^v;v:"aeiouy")

1

R,83个字节

cat(outer((l<-letters)[a<-c(1,5,9,15,21,25)],l[-a],paste0)[sample(1:120,5)],sep="")

在矩阵中生成所有可能的元音辅音序列,然后随机采样其中的5个,产生10个字母的单词。



0

果冻,13个字节

Øy,ØYẊ€Zs5ḢŒl

说明:

Øy,ØYẊ€Zs5ḢŒl
Øy,ØY         Makes a list of two lists of characters: [[list-of-vowels-with-y], [list-of-consonants-without-y]]
     Ẋ€       Shuffle €ach.
       Z      Zip those two lists together. [[random-vowel, random-consonant],...]
        s5    Split them into chunks of five (because each pair contains two letters, this splits them into chunks of 10 letters)
          Ḣ   Take the list of 5 pairs.
           Œl Make each of the characters in it lowercase
              Implicit concatenation and print.

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.