2011-07-07 70 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

相關問題