Menu
Coddy logo textTech

Аналитика слов

Часть раздела Логика и управление потоком путешествия по Ruby на Coddy — урок 54 из 56.

Самостоятельная задача, которая задействует строки, хеши, Hash.new(0) и методы Enumerable одновременно.

challenge icon

Задание

Средне

Прочитайте одну строку ввода — предложение. Проанализируйте его и выведите три строки:

  1. Количество уникальных слов (без учета регистра, с удаленной пунктуацией). Повторяющиеся слова считаются один раз.
  2. Повторяющиеся слова (те, которые встречаются более одного раза), отсортированные по алфавиту и разделенные , . Если таких слов нет, выведите (none).
  3. Слова-палиндромы (слова, которые читаются одинаково слева направо и справа налево), длиной ≥ 2, отсортированные по алфавиту и разделенные , . Если таких слов нет, выведите (none).

Удалите символы .,!?:;"() из каждого слова перед обработкой. Приведите все к нижнему регистру для сравнения.

Для входных данных Madam saw a racecar. Dad said hello hello to mom. вывод будет следующим:

9
hello
dad, madam, mom, racecar

Шпаргалка

Используйте Hash.new(0) для подсчета частоты слов, затем используйте методы Enumerable для фильтрации и сортировки:

words = line.gsub(/[.,!?:;"()]/, '').downcase.split
freq = Hash.new(0)
words.each { |w| freq[w] += 1 }

unique = freq.keys
repeated = freq.select { |_, v| v > 1 }.keys.sort
palindromes = unique.select { |w| w.length >= 2 && w == w.reverse }.sort

Выводите (none), когда коллекция пуста:

puts repeated.empty? ? "(none)" : repeated.join(", ")

Попробуйте сами

input = gets.chomp

# TODO: разделить, удалить пунктуацию, привести к нижнему регистру, затем вывести:
#   количество уникальных слов, повторяющиеся слова, палиндромы (длина >= 2)
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком