Находить ли строку в алфавитном порядке слова в Ruby? - PullRequest
0 голосов
/ 04 июля 2018

Подсказка состоит в том, чтобы написать метод order_word?, Который возвращает, встречаются ли буквы в слове в алфавитном порядке. Предположим, что строка содержит только строчные буквы без пробелов и знаков препинания. Мое решение следующее:

def ordered_word?(word)
  letters=word.split("")
  (0..(letters.length-1)).all? do |i|
    if letters[i]<=letters[i+1]
      return true
    end
  end 
end

Тем не менее, он не проходит все мои тесты и я не понимаю почему. Аргументы «amz» и «zma» дают ожидаемый результат, но если это что-то вроде «abcdgfe», он все равно возвращает true, даже если это не упорядоченное слово.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Очень простое сравнение будет следующим:

word.chars.sort.join == word

То, что это делает, принимает символы строки в виде массива, сортирует их по буквам и цифрам, а затем объединяет их обратно в строку. Затем эта строка сравнивается с исходной строкой, и если она равна, то переупорядочение не было выполнено, и строка уже была упорядочена.

Если вы хотите расширить это как метод до String класса:

class String

  def ordered?
    chars.sort.join == self
  end
end
0 голосов
/ 04 июля 2018

return возвращается из всего метода. Вам нужно просто «вернуться» из блока, не указывая return и просто полагаясь на то, что последняя строка блока является возвращаемым значением, например:

def ordered_word?(word)
  letters=word.split("")
  (0..(letters.length-1)).all? do |i|
    letters[i]<=letters[i+1]
  end
end

Хотя вы можете использовать некоторые удобные методы ruby, чтобы сократить это до:

def ordered_word?(word)
  word.each_char.each_cons(2).all? do |first, second|
    first <= second
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...