Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
(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
|
|