Rubyで2つの配列に同じ要素が任意の順序で含まれているかどうかを確認し、同じインデックスで同じ要素が取得されるかどうかを確認する方法はありますか?
概要
arr = [1,4,6,3]
arr2 = [3,4,3,6]
arr.each do |item|
p "X" if arr2.include?(item)
end
しかし、上記は要素が見つかった場合にのみ X を返しますが、両方の配列に同じインデックスに同じ要素が含まれている場合に「O」を返し、複数の要素が見つかった場合に X を繰り返したくないのです。
eachwithindexを使用してみましたが、結果が得られませんでした
解決策
いくつかのヘルパー メソッドを備えたクラスにロジックをラップします。
class CodeBreaker
def initialize(guess, code)
@guess = guess
@code = code
@numbers = Set.new(code)
return if guess.size == code.size
raise ArgumentError, 'guess and code need to share the same size'
end
def hint
guess.map.with_index do |number, index|
mark_when_equal_at_index(index) || mark_when_number_in_code(number) || '-'
end
end
private
attr_reader :guess, :code, :numbers
def mark_when_equal_at_index(index)
'O' if guess[index] == code[index]
end
def mark_when_number_in_code(number)
'X' if code.include?(number)
end
end
code_breaker = CodeBreaker.new([1, 4, 6, 3], [3, 4, 3, 6])
code_breaker.hint
#=> ["-", "O", "X", "X"]