🟡 Pack Intermedio

⚠️
Nivel medio: Estos problemas requieren combinar varias técnicas. Si no sale en 15 minutos, mira la pista antes de la solución.

Ejercicio 1: Palíndromo (5 pts)

Determina si una frase es palíndromo (ignorando espacios, mayúsculas y puntuación).

Entrada: Anita lava la tina
Salida: SI
💡 Pista

Filtra solo letras, convierte a minúsculas, compara con su reverso.

👁️ Ver solución
texto = input().lower()
limpio = "".join(c for c in texto if c.isalpha())
print("SI" if limpio == limpio[::-1] else "NO")

Ejercicio 2: Letra más frecuente (6 pts)

Encuentra la letra que más se repite en un texto.

Entrada: banana
Salida: a 3
👁️ Ver solución
texto = input().lower()
freq = {}
for c in texto:
    if c.isalpha():
        freq[c] = freq.get(c, 0) + 1
mas = max(freq, key=freq.get)
print(mas, freq[mas])

Ejercicio 3: Segundo mayor (5 pts)

Encuentra el segundo número más grande de una lista.

Entrada: 5 2 8 8 1 9
Salida: 8
👁️ Ver solución
nums = list(map(int, input().split()))
unicos = sorted(set(nums), reverse=True)
print(unicos[1])

Ejercicio 4: Cifrado César (7 pts)

Cifra un texto desplazando cada letra N posiciones.

Entrada: abc
3
Salida: def
👁️ Ver solución
texto = input()
n = int(input())
resultado = ""
for c in texto:
    if c.isalpha():
        base = ord('A') if c.isupper() else ord('a')
        resultado += chr((ord(c) - base + n) % 26 + base)
    else:
        resultado += c
print(resultado)

Ejercicio 5: Números primos (6 pts)

Lista todos los primos entre A y B.

Entrada: 10 20
Salida: 11 13 17 19
👁️ Ver solución
def es_primo(n):
    if n < 2: return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0: return False
    return True

a, b = map(int, input().split())
primos = [n for n in range(a, b + 1) if es_primo(n)]
print(" ".join(map(str, primos)))

Ejercicio 6: Ranking (8 pts)

N alumnos con nombre y nota. Ordena por nota desc, empates por nombre asc.

Entrada:
3
Ana 85
Luis 92
Eva 85
Salida:
Luis 92
Ana 85
Eva 85
👁️ Ver solución
n = int(input())
alumnos = []
for _ in range(n):
    partes = input().split()
    alumnos.append((partes[0], int(partes[1])))

for nombre, nota in sorted(alumnos, key=lambda x: (-x[1], x[0])):
    print(nombre, nota)

Ejercicio 7: Anagramas (7 pts)

Determina si dos palabras son anagramas (mismas letras).

Entrada: roma amor
Salida: SI
👁️ Ver solución
a, b = input().lower().split()
print("SI" if sorted(a) == sorted(b) else "NO")

Ejercicio 8: Triángulo centrado (6 pts)

Dibuja un triángulo de asteriscos centrado.

Entrada: 4
Salida:
   *
  ***
 *****
*******
👁️ Ver solución
n = int(input())
for i in range(1, n + 1):
    print(" " * (n - i) + "*" * (2 * i - 1))

Ejercicio 9: Suma de dígitos (5 pts)

Suma los dígitos de un número.

Entrada: 12345
Salida: 15
👁️ Ver solución
n = input()
print(sum(int(d) for d in n))

Ejercicio 10: Eliminar duplicados (6 pts)

Elimina elementos duplicados manteniendo el orden.

Entrada: 1 2 2 3 1 4 3
Salida: 1 2 3 4
👁️ Ver solución
nums = input().split()
vistos = []
for n in nums:
    if n not in vistos:
        vistos.append(n)
print(" ".join(vistos))