Я новичок в Ruby и пытаюсь выяснить проблему для онлайн-теста. Проблема заключается в следующем:Модуль сравнения аналогов Ruby
Анаграмма это слово, образованное от другого перестановкой его письма, используя все оригинальные письма ровно один раз; например, оркестр может быть перестроен в корзину.
Напишите функцию, которая проверяет, являются ли два слова анаграммами друг друга.
Например, AreAnagrams.are_anagrams? ('Momdad', 'dadmom') должно return true, поскольку аргументы являются анаграммами.
код я придумал это:
module AreAnagrams
def self.are_anagrams?(string_a, string_b)
## Create @word1 variable to store string_a
@word1 = string_a
## Create @word1_compare variable to store string_a in lower case
@word1_compare = @word1.downcase
## Create @word2_compare variable to store string_b
@word2 = string_b
## Create @word2_compare variable to store string_b in lower case
@word2_compare = @word2.downcase
## Check length of @word1 and @word2 to make sure they are the same length
if @word1.length == @word2.length
=begin
Sort the letters of the @word1 and @word2 variables and compare
them to see if they are anagrams
=end
if @word1_compare.chars.sort.join == @word2_compare.chars.sort.join
puts "#{@word1} and #{@word2} are anagrams!"
else
puts "#{@word1} and #{@word2} are not anagrams!"
end
else
puts "#{@word1} and #{@word2} are not anagrams!"
end
end
end
Когда я отправить код, я получаю следующее обратно из теста:
Компиляция ОК, но 4 из 4 тестовых случаев не в состоянии
Пример случай: Неправильный ответ
слова с уникальными буквами: Неправильный ответ
Слова с повторяющимися буквами: Неправильный ответ
Одно слово является префиксом другого слова: Неправильный ответ
Я проверил мой код с несколькими строками и, кажется, работать просто отлично. Похоже, он хочет, чтобы я проверял более конкретные экземпляры (специальные символы, слова с повторяющимися буквами и т. Д.), Но это действительно необходимо? Извините, если это глупый вопрос, я новичок в Ruby и проиграл.
Любая помощь была бы принята с благодарностью!
Поскольку это метод класса, вы должны * действительно * избегать использования переменных экземпляра здесь. Они будут сохраняться между вызовами метода, чего вы, вероятно, не хотели. Просто используйте регулярные локальные переменные, не требуя '@'. – tadman
Звучит неплохо, я тоже исправлю переменные. Большое спасибо, еще раз спасибо! – Bryan
@tadman ответил на ваш вопрос, но есть несколько вещей, которые вы могли бы сделать, чтобы улучшить свой метод. 1, Проблема не просит вас «puts», поэтому вы должны удалить это. 2. Когда вы хотите вернуть результат (например, «истина» или «ложь»), а также «ставит» результат, обычно лучше «ставить» вне метода. Это делает метод более универсальным, если вы хотите использовать его снова, в другом месте вашей программы, без каких-либо или разных сообщений 'puts' ... –