私は配列だけで文字列を使用しません。
コード
def replace_underscores(word, hidden_word, guess)
word.scan(Regexp.new(guess)) { hidden_word[Regexp.last_match.begin(0)] = guess }
hidden_word
end
例
word = "busboi"
hidden_word = "_" * word.length
#=> "______"
replace_underscores(word, hidden_word, "a") # guess "a"
#=> "______"
replace_underscores(word, hidden_word, "b") # guess "b"
#=> "b__b__"
replace_underscores(word, hidden_word, "r") # guess "r"
#=> "b__b__"
replace_underscores(word, hidden_word, "o") # guess "o"
#=> "b__bo_"
replace_underscores(word, hidden_word, "u") # guess "u"
#=> "bu_bo_"
replace_underscores(word, hidden_word, "s") # guess "s"
#=> "busbo_"
hidden_wordが推測されているかどうかを確認するには、次の
def guessed?(hidden_word)
hidden_word.count('_').zero?
end
guessed?(hidden_word)
#=> false
レッツ・許可証1以上の推測を。
replace_underscores(word, hidden_word, "i") # guess "i"
#=> "busboi"
guessed?(hidden_word)
#=> true
注意
Iは、各マッチのために実行されるブロックと方法String#scanを使用しました。ブロック内でMatchDataオブジェクトは、クラスメソッドRegexp::last_matchで取得されます。 (あるいは、グローバル変数$~
をRegexp.last_match
に置き換えることもできます。詳細については、「特別なグローバル変数」をRegexpで検索してください。)メソッドMatchData.beginは、str
の文字のインデックスを取得するために使用され、これはちょうど推測された文字に置き換えられます。
u、s、o、iを削除する条件とは何ですか? – Gopal
「busboi」は一体何ですか?それは本当の言葉であるはずですか? –
私は 'busboi'が単なる例であると仮定しています、@TomLord! LOL –