アナグラムを配列の配列に配置するコードがあります。(アナグラムを含む)しかし、どこかでバグが発生し、最初の値が配列として出力されず、文字列として出力されます
<< 演算子を使用して、ある配列を別の配列にプッシュしています。コードはそれほど複雑ではありませんが、バグが見つかりません
def combine_anagrams(words)
indexes = []
anagrams = []
words.each{|word|
if(word.is_a? String )
first_word = word.downcase.chars.sort.join
words.each{|second_word|
if(second_word.is_a? String)
if(first_word == second_word.downcase.chars.sort.join)
indexes << words.index(second_word)
end
end
}
indexes.each{|index| anagrams << words[index] }
words.reject!.with_index {|el, idx| indexes.include?(idx)}
words << anagrams # i replaced words with an array all_anagrams
indexes = []
anagrams = []
end
}
return words
end
puts combine_anagrams([ 'cars','for', 'potatoes', 'racs', 'four','scar', 'creams', 'scream'] ).inspect
出力
["for", "four", ["cars", "racs", "scar"], ["potatoes"], ["creams", "scream"]]
入力で「cars」と「for」の順序を入れ替えると、
["cars", "racs", "scar", ["for"], ["potatoes"], ["four"], ["creams", "scream"]]
何が起きてる
乱雑なコードで申し訳ありませんが、Rubyを学びたいと思っています
配列を画面に出力するときに、すべてのアナグラムの配列を格納する追加の変数を作成しましたall_anagrams = []
。何らかの理由で「for」と「four」を除くすべての値を取得します。all_anagrams
ループしていて、それらの値がスキップされますか? ただし、この問題に対処する方法がわかりません。
all_anagrams の出力は
[["cars", "racs", "scar"], ["potatoes"], ["creams", "scream"]]