使用一个ruby数组的元素作为另一个的索引

时间:2013-09-30 02:42:29

标签: ruby arrays

在下面的代码中,我试图获取数组guess中字母secret_word出现的索引,将索引存储在数组indices中,然后使用{ {1}},将同一个字母插入另一个数组indices,而不会打扰user_word中可能已存在的其他字母。

user_word

错误消息意味着索引的每个元素都是一个数组,而不是预期的fixnum。它不会让我使用索引中的元素索引到if secret_word.include?(guess) #secret_word is an array of chars. guess is a char. indices = Array.new indices<< secret_word.each_index.select{ |letter| secret_word[letter] == guess } #verified that this array fills correctly indices.each do |e| user_word[e] = guess end end 。帮助

2 个答案:

答案 0 :(得分:2)

.select返回一个数组,您尝试将其作为元素添加到indices,因此您有一个包含一个元素的数组数组,正确的方法:

indices = secret_word.each_index.select{ |letter| secret_word[letter] == guess }

indices += ...

但我会做这样的事情:

user_word =
  user_word.split("") 
    .zip(secret_word)
    .map { |u, s| s == guess ? s : u }
    .join

答案 1 :(得分:0)

游戏时间!

DOSRW = “克ooxdenql9qdc9uhkdo {BJQ {1}} {rs9qdrsxkhrsdbg {1}} {qdghbbtodonmxs {1}} SY”

sdcnmj9xdnqbghcdsn

请注意,为了跟踪当前所选字母(hqdataak9dby)的位置以及到目前为止所有正确猜测的字母(hkdl)的位置,我有点笨拙。游戏继续进行,直到所有def guess_the_word words = '' DOSRW.each_byte {|b| words += b.succ.chr} words = words.gsub('e',' ').gsub(':','e').split @sw = words[rand(words.size)].chars fini = 2**@sw.size - 1 so_far(v=0) loop do print 'Guess a letter: ' letter = gets.chomp.downcase b = @sw.inject('') {|w,c| w + (c == letter ? '1' : '0')}.to_i(2) b > 0 ? (puts "#{b.to_s(2).chars.map(&:to_i).inject(&:+)} of those!") : (puts "Sorry") v |= b so_far(v) break if v == fini end puts "Congratulations!" end def so_far(v) s = v.to_s(2) s = ((?0 * (@sw.size-s.size)) + s).chars puts "#{@sw.zip(s).inject('') {|m,e| m + (e.last=='1' ? e.first : '-')}}" end 的位等于1:b