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

starius 05.03.12 в 10:02

0
Минутку...