【问题标题】:Creating a word from a random set of specific letters从一组随机的特定字母中创建一个单词
【发布时间】:2011-09-30 18:45:33
【问题描述】:

我正在尝试用一组特定的字母生成一个单词。

单词的第一个字母必须包含字母 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

【问题讨论】:

  • 这个名字是怎么得到的?总是5个字符?总是 1 2 2 1 2?
  • 我希望你的意思是“下面的代码”,而不是“代码爆炸”!

标签: ruby random generator letters


【解决方案1】:
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

【讨论】:

  • 实际上你必须重复一下,但这就是它的本质
  • 请注意,在 Ruby 1.9+ 下,您不需要 ,1'PGTK'[rand 4]
  • @Phrogz,当然,而且unpack('C').first 可以是ord。 (我尝试发布广泛兼容的示例。)
【解决方案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

【讨论】:

  • 感谢您的宝贵反馈!两者都是极好的建议。这是我第一次看到.map 的使用。只是学习 ruby​​ 并喜欢看到所有这些不同的方式来实现最终目标:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多