問題の解答例がいまいちよくわかりません。問題は「"a"のあとの3文字以内に"z"がある文字列のものをtrueと返すメソッドを書け」です。
解答例の自分なりの解釈をコードの横に#で書くので、もし間違っている解釈があれば指摘してください。また、「??」が付いている解釈がよくわからなかったところです。以下に質問内容を書かせてもらってます。
lang
1#問題の原文 2# Write a method that takes a string in and returns true if the letter 3# "z" appears within three letters **after** an "a". You may assume 4# that the string contains only lowercase letters. 5 6 7def nearby_az(string) #nearby_az(string)というメソッドを定義します 8 idx1 = 0 #変数idx1に0を代入します。 9 while idx1 < string.length #idx1よりも文字列の文字数が多い時、以下を繰り返す 10 if string[idx1] != "a" #もし文字列のidx1番目の文字が"a"でなかった場合、 11 idx1 += 1 #idx1に1をたす 12 next **#次に行く??** 13 end #ifを終わる 14 15 idx2 = idx1 + 1 #変数idx2をidx1+1とする 16 while (idx2 < string.length) && (idx2 <= idx1 + 3) #idx2が文字列の文字数より少なく、かつidx1+3以下の時、以下を繰り返す 17 if string[idx2] == "z" #もし文字列のidx2番目の文字が"z"なら 18 return true #trueを返す 19 end #ifを終わる 20 21 idx2 += 1 #idx2に1をたす 22 end #以上を繰り返す 23 24 idx1 += 1 **#idx1に1をたす??** 25 end #以上を繰り返す 26 27 return false #falseを返す 28end #終わり 29 30 31 32# These are tests to check that your code is working. After writing 33# your solution, they should all print true. 34 35puts('nearby_az("baz") == true: ' + (nearby_az('baz') == true).to_s) 36puts('nearby_az("abz") == true: ' + (nearby_az('abz') == true).to_s) 37puts('nearby_az("abcz") == true: ' + (nearby_az('abcz') == true).to_s) 38puts('nearby_az("a") == false: ' + (nearby_az('a') == false).to_s) 39puts('nearby_az("z") == false: ' + (nearby_az('z') == false).to_s) 40puts('nearby_az("za") == false: ' + (nearby_az('za') == false).to_s)
- nextの意味がよくわからないです。一つ目のif文はもし指定の番号idx1の文字が"a"でないなら、次の文字が"a"なのか確かめにもう一回if文の最初に戻るのか、もしくは次のコード(idx2の方)に移動するのかわからないです。また、もし前者の場合、if文の最初に戻るのはnextの効果ですか?またはwhileの効果ですか?
(後者の場合次のコードにいくと"a"を発見できていない状態で次に行くことになるのでおかしいとは思いますが。。。)
- 下から4文目のidx1 + 1の必要性がわからないです。おそらくそれまでに全ての文字列の文字の検証が終わっていると思うので次の文字に行く必要がない気がします。ただこのidx1 + 1をとり実行すると、
lang
1nearby_az("baz") == true: true 2nearby_az("abz") == true: true 3nearby_az("abcz") == true: true 4
のようになり6つ欲しいtrueの結果が3つしか得られず、ここで矢印キーをおすと、
lang
1nearby_az("baz") == true: true 2nearby_az("abz") == true: true 3nearby_az("abcz") == true: true 4 5 6^[[B^[[B^[[A^[[A^[[B^[[D^[[A^[[B^[[C^[[A
のように、よくわからない文字列がでてきます。これは一体なんなのでしょうか?
長文になってしまいましたが、ご教授お願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/21 02:20
2015/10/21 14:27