Готовый перевод HW 1: Ruby calisthenics / ДЗ1: Ruby тренировка: Part 1: fun with strings
(a) Напишите метод, который определяет, является ли данное слово или фраза палиндромом, что значит, что оно читается одинаково вперед и назад, не учитывая регистра, пунктуации и символов, не входящих в слова. (для наших целей определим "символ, не входящий в слова", как "символ, который регулярные выражения Руби воспринимают как символ, не входящий в слова".) Ваше решение не должно включать циклы или итерирование любого вида. Вы найдёте синтаксис регулярных выражений очень полезным; он вкратце рассмотрен в книге, сайт rubular.com позволяет "посидеть в шкуре" регулярных выражений. Методы, которые вы можете найти полезными: String#downcase,
String#gsub, String#reverse
Предложение: как только вы заставите ваш код работать, рассмотрите возможность сделать его красивее благодаря использованию таких методов, как цепочка методов, как описано в ELLS 3.2.
Примеры:
palindrome?("A man, a plan, a canal -- Panama") #=> true
palindrome?("Madam, I'm Adam!") # => true
palindrome?("Abracadabra") # => false (nil тоже подходит)
def palindrome?(string)
# ваш код
end
(b) Имея входную строку, вернуть хеш, у которого ключами будут слова этой строки, а значениями -- сколько раз это слово встретилось. Не используйте циклы с for. Символы, не входящие в слова, не должны учитываться. Регистр не должен иметь значения. Слово определяется как строка символов между двумя границами. (Подсказка: последовательность \b в регулярных выражениях Руби означает "граница слова".)
Пример:
count_words("A man, a plan, a canal -- Panama")
# => {'a' => 3, 'man' => 1, 'canal' => 1, 'panama' => 1,
'plan' => 1}
count_words "Doo bee doo bee doo" # => {'doo' => 3, 'bee' =>
2}
def count_words(string)
# ваш код
end
Переведено на Нотабеноиде
http://notabenoid.org/book/26991/90167
Переводчики: starius
Настройки
Готово:
