Во-первых, некоторый необходимый фон. Я пытаюсь сделать числовую версию игры Mastermind как способ обучения коду в Ruby. Мой код в основном работает следующим образом:
- Компьютер генерирует массив (
@computer_sequence
) из 4 случайных чисел из 1-5 - Пользователь вводит 4-значную последовательность, которая завершается в массиве с именем
@user_array
. - Метод, называемый
compare
, выполняет итерацию через@user_array
, сравнивая значение и индекс каждого числа с параметрами в@computer_sequence.
. Затем программа сообщает пользователю, сколько их номеров имеет правильное значение и правильное положение, или сколько чисел имеет только правильное значение.
Проблема: Если в массиве имеется несколько экземпляров числа, они получают одинаковый индекс, правильно? Например, если у меня есть массив [1, 3, 3, 4]
, номер три имеет индекс 1, хотя есть два 3s. Тем не менее, для работы этой программы каждый номер должен иметь уникальную позицию (это индекс, даже слово, которое я хочу здесь?) В массиве, даже если число происходит несколько раз. Это имеет смысл?
Кроме того, здесь код для метода compare
:
def compare
value_only = 0
value_and_place = 0
puts "The computer values are: #{@computer_sequence}"
puts "The user values are: #{@user_array}"
@user_array.each do |candidate|
@computer_sequence.each do |computer_number|
if candidate == computer_number && @user_array.index(candidate) == @computer_sequence.index(computer_number)
value_and_place +=1
elsif candidate == computer_number && @user_array.index(candidate) != @computer_sequence.index(computer_number)
value_only +=1
end
end
end