Spelling Bee


Descripción

El New York Times publica un acertijo diariamente llamado “Spelling Bee” que reta a los lectores a formar tantas palabras como sea posible usando solo siete letras, dónde una de las palabras es requerida y las palabras deben tener al menos cuatro letras.

Por ejemplo, el día que este ejercicio se escribe, las letras son ACDLORT, con R como letra requerida. Así que “color” es una palabra aceptable, pero “told” no lo es, debido a que no usa R, y “rat” tampoco lo es debido a que solo tiene tres letras. Las letras se pueden repetir, así que “ratatat” es aceptable.

Escribe una función llamada check_word que verifique si una palabra dada es aceptable. La función toma como parámetros la palabra a verificar, una cadena de siete letras disponibles para formar la palabra, y una cadena más que contiene solo la letra que es requerida.

Puedes usar las funciones de ejercicios previos.

Esta es una guía de la función que incluye doctests. Completa la función y verifica que todos los tests pasen.

def check_word(word, available, required):
  """Check whether a word is acceptable.
  
  >>> check_word('color', 'ACDLORT', 'R')
  True
  >>> check_word('ratatat', 'ACDLORT', 'R')
  True
  >>> check_word('rat', 'ACDLORT', 'R')
  False
  >>> check_word('told', 'ACDLORT', 'R')
  False
  >>> check_word('bee', 'ACDLORT', 'R')
  False
  """
  return False

Ejemplo de Ejecución:

print(check_word('color', 'ACDLORT', 'R'))
True
print(check_word('ratatat', 'ACDLORT', 'R'))
True
print(check_word('rat', 'ACDLORT', 'R'))
False
print(check_word('told', 'ACDLORT', 'R'))
False
print(check_word('bee', 'ACDLORT', 'R'))
False

Solución

Mostrar solución
def uses_only(word, available):
  for letter in word.lower():
    if letter not in available.lower():
      return False

  return True


def uses_all(word, required):
  for letter in required.lower():
    if not letter in word.lower():
      return False

  return True


def check_word(word, available, required):
  """Check whether a word is acceptable.
  
  >>> check_word('color', 'ACDLORT', 'R')
  True
  >>> check_word('ratatat', 'ACDLORT', 'R')
  True
  >>> check_word('rat', 'ACDLORT', 'R')
  False
  >>> check_word('told', 'ACDLORT', 'R')
  False
  >>> check_word('bee', 'ACDLORT', 'R')
  False
  """
  return len(word) >= 4 and uses_only(word, available) and uses_all(word, required)

print(check_word('color', 'ACDLORT', 'R'))
print(check_word('ratatat', 'ACDLORT', 'R'))
print(check_word('rat', 'ACDLORT', 'R'))
print(check_word('told', 'ACDLORT', 'R'))
print(check_word('bee', 'ACDLORT', 'R'))

Probar solución en Google Colab

Fuente del ejercicio: https://allendowney.github.io/ThinkPython/chap07.html#id3