2017-01-02 9 views
0

私はアプリのアカデミーの練習問題について質問しています。Rubyの挿入メソッドが要素を間違ったインデックスに挿入する

文字列内の文字列とインデックスの配列を取り込むメソッドを記述します。入力文字列 からの文字列をインデックスの配列のインデックスで指定された順序で含む新しい文字列を生成します。

私はそれを解決するためにRubyのinsertメソッドを使用してみました:

def scramble_string(string, positions) 

    arr = [] 
    indx = 0 
    positions.each do |x| 
    arr.insert(x,string[indx]) 
    indx += 1 
    end 
    return arr.join("") 
end 
puts scramble_string("abcd", [3, 1, 2, 0]) # for testing 
puts scramble_string("markov", [5, 3, 1, 4, 2, 0]) # for testing 

# These are tests to check that your code is working. After writing 
# your solution, they should all print true. 

puts("\nTests for #scramble_string") 
puts("===============================================") 
    puts(
     'scramble_string("abcd", [3, 1, 2, 0]) == "dbca": ' + 
     (scramble_string("abcd", [3, 1, 2, 0]) == "dbca").to_s 
    ) 
    puts(
     'scramble_string("markov", [5, 3, 1, 4, 2, 0]) == "vkaorm"): ' + 
     (scramble_string("markov", [5, 3, 1, 4, 2, 0]) == "vkaorm").to_s 
    ) 
puts("===============================================") 

最初のチェック「ABCD」のために、それが正しい答え「DBCA」を出力しますが、2番目のテストが実行されたときに、私が取得間違った答え "vrokam"。正解は "vkaorm"であるはずです。なぜ私のコードが2回目のチェックのために働いていないのか分かりません。どんな助けもありがとうございます。

EDIT:

私は自分のコードに間違いを見つけました。代わり

arr.insert(x,string[indx]) 

の正しいコードが

arr.insert(indx,string[x]) 

答えて

1

方法挿入配列の変化の大きさであるべきです。

あなたは、このコードで起こったかを理解することができます:私は見

def debug_array(arrr) 
    puts "---------------- #{arrr.size}, #{arrr.join('.')}" 
end 

def scramble_string(string, positions) 

    arr = Array.new(string.size) 
    indx = 0 
    positions.each do |x| 
    puts "#{indx} >> #{string[indx]}" 
    arr.insert(x,string[indx]) 
    indx += 1 
    debug_array arr 
    end 
    return arr.join("") 
end 
puts scramble_string("abcd", [3, 1, 2, 0]) # for testing 
puts scramble_string("markov", [5, 3, 1, 4, 2, 0]) # for testing 
+0

を。ありがとう。配列のサイズを変更せずに挿入のように動作するメソッドはありますか? – JimmyW

+0

juste do 'arr [x] =文字列[indx]' – djothefou

関連する問題