Menu
Coddy logo textTech

Análisis de palabras

Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 54 de 56.

Un desafío independiente que pone a prueba el uso de cadenas de texto, hashes, Hash.new(0) y métodos de Enumerable, todo a la vez.

challenge icon

Desafío

Intermedio

Lee una sola línea de entrada, una oración. Analízala e imprime tres líneas:

  1. El número de palabras únicas (insensible a mayúsculas y minúsculas, eliminando los signos de puntuación). Las palabras repetidas cuentan una sola vez.
  2. Las palabras repetidas (aquellas que aparecen más de una vez), ordenadas alfabéticamente, unidas con , . Si no hay ninguna, imprime (none).
  3. Las palabras palíndromas, palabras que se leen igual de adelante hacia atrás y de atrás hacia adelante, con una longitud ≥ 2, ordenadas alfabéticamente, unidas con , . Si no hay ninguna, imprime (none).

Elimina los caracteres .,!?:;"() de cada palabra antes de procesarla. Convierte todo a minúsculas para la comparación.

Para la entrada Madam saw a racecar. Dad said hello hello to mom., la salida es:

9
hello
dad, madam, mom, racecar

Hoja de referencia

Usa Hash.new(0) para contar las frecuencias de las palabras, luego utiliza los métodos de Enumerable para filtrar y ordenar:

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

Imprime (none) cuando una colección esté vacía:

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

Pruébalo tú mismo

input = gets.chomp

# TODO: dividir, eliminar puntuación, convertir a minúsculas, luego imprimir:
#   conteo único, palabras repetidas, palíndromos (longitud >= 2)
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo