DEV Community

Cover image for Como resolver el Problema 5 (Nivel Basico Concurso de Programación CUVALLES 2024B)
3nginuity
3nginuity

Posted on

Como resolver el Problema 5 (Nivel Basico Concurso de Programación CUVALLES 2024B)

Problema

Problema 5 (Nivel Basico Concurso de Programación CUVALLES 2024B)

Palabras Cortas (Autor: Jorge Ernesto Castillo Rizo)

Escribe un programa que identifique y cuente las palabras de 3 caracteres o menos en un texto dado (S) por el usuario. Ignora mayúsculas, minúsculas y signos de puntuación, y devuelve la cantidad total de palabras cortas encontradas.
Nota: Todos los caracteres en S denotan valores de la Aa - Zz.

Entrada: Una línea de texto.
Salida: Un número que representa la cantidad total de palabras con 3 caracteres o menos.

Ejemplo:
Entrada:

 El sol se oculta en el horizonte, y la noche llega.

Enter fullscreen mode Exit fullscreen mode

Salida:

7
Enter fullscreen mode Exit fullscreen mode

Explicación de la Solución

1. Comprender el Problema

El objetivo es contar cuántas palabras dentro de una frase tienen 3 caracteres o menos.

  • Entrada: Un texto con palabras separadas por espacios.
  • Salida: Un número que representa la cantidad de palabras cortas.
  • Restricciones: No se deben considerar signos de puntuación y las mayúsculas/minúsculas no afectan el conteo.

Ejemplo:

Entrada:  "El sol se oculta en el horizonte, y la noche llega."
Salida:    7
Enter fullscreen mode Exit fullscreen mode

2. Identificar los Pasos para Resolverlo

Para llegar a la solución, descomponemos el problema en pasos más pequeños:

  1. Eliminar los signos de puntuación → Porque el problema indica que deben ignorarse.
  2. Dividir el texto en palabras → Para analizar una por una.
  3. Contar cuántas palabras tienen 3 caracteres o menos → Usamos un contador.
  4. Imprimir el resultado → Mostramos la cantidad total de palabras cortas.

3. Diseño de la Solución (Paso a Paso)

1️⃣ Preprocesar el texto:

  • Eliminar signos de puntuación.
  • No es necesario convertir a minúsculas porque no afecta el conteo.

2️⃣ Dividir la frase en palabras:

  • Usamos el espacio como separador.

3️⃣ Recorrer cada palabra y contar las que cumplan la condición:

  • Si una palabra tiene 3 caracteres o menos, sumamos 1 al contador.

4️⃣ Mostrar el resultado final:

  • Imprimir el valor del contador.

📝 Código en Python

# Define una función llamada solution que recibe una lista de palabras
def solution(words):
    # Inicializa un contador en 0
    c = 0
    # Itera sobre cada palabra en la lista de palabras
    for word in words:
        # Limpia la palabra: crea una nueva cadena solo con caracteres alfanuméricos
        # join: une todos los caracteres que cumplen la condición isalnum()
        clean_word = ''.join(char for char in word if char.isalnum())
        # Verifica si la palabra limpia tiene 3 o menos caracteres y no está vacía
        if len(clean_word) <= 3 and clean_word: 
            # Incrementa el contador si se cumple la condición
            c += 1
    # Devuelve el total de palabras que cumplen con el criterio
    return c

# Lee una línea de entrada y la divide en palabras
words = input().split()
# Imprime el resultado de llamar a la función solution con las palabras
print(solution(words))

Enter fullscreen mode Exit fullscreen mode

💡 Complejidad del Algoritmo

La solución tiene una complejidad de O(n), donde n es el número de palabras en la frase. Esto se debe a que:

  • La limpieza del texto es O(m), donde m es el tamaño del string.
  • La división en palabras es O(n).
  • El recorrido de la lista de palabras y el conteo es O(n).
  • En total, la solución sigue una complejidad lineal O(n + m), lo cual es eficiente para este problema.

Link al repositorio

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more