2011-07-07 45 views
0

我试图用一组特定的字母生成一个词。从随机设置的特定字母创建一个词

单词的第一个字母必须包含字母P,G,T,K,第二A,E,I,O,U

我试图与没有成功的代码吹产生它们。一旦我存储所有这些随机字母作为变量的,我会就加入他们在一起,使随机字

letter1 = rand(80,84,75,71).chr 
letter2 = rand(97,101,105,111,117,121).chr 

name = letter1 + letter2 + letter2 + letter1 + letter2 

puts name 
+1

这个名字是怎么得到的?总是5个字符?总是1 2 2 1 2? – tokland

+0

我希望你的意思是“下面的代码”,而不是“代码打击”! –

回答

4
puts 'PGTK'[rand(4), 1] + 'AEIOU'[rand(5), 1] 

对于一些真正的乐趣,用实际源自噪声的熵:

def noise_index s 
    s[@f.sysread(1).unpack('C').first/256.0*s.length, 1] 
end 
def run 
    open '/dev/random', 'r' do |f| 
    @f = f 
    100.times do 
     puts noise_index('PGTK') + noise_index('AEIOU') 
    end 
    end 
end 
+1

其实你必须重复一点,但这是它的本质 –

+1

请注意,在Ruby 1.9+下,你不需要''1'',''PGTK'[rand 4]' – Phrogz

+0

@Progro,当然,也,'unpack('C')。first'可以是'ord'。 (我尝试发布广泛兼容的示例。) – DigitalRoss

2

如果您只需要两个字母的最后一个字:

['PGTK', 'AEIOU'].map { |s| s.chars.to_a.sample }.join 

或者按照您的问题示例:

letter1, letter2 = ['PGTK', 'AEIOU'].map { |s| s.chars.to_a.sample } 
name = letter1 + letter2 + letter2 + letter1 + letter2 
+0

感谢您的好评!两者都是很好的建议。这是我见过的.map的第一个使用。只是学习红宝石和爱看到所有这些不同的方式来实现最终目标:) – ScrubDubbins

相关问题