lunes, 21 de abril de 2014

Check iO: un juego para programar con Python

Check iO es una sitio creado por programadores ucranianos con ejercicios para practicar las habilidades adquiridas en Python. 


http://www.checkio.org/
Uno de los problemas planteados en el sitio es el siguiente:

"Se comienza a alimentar a las palomas. Un minuto más tarde aparecen dos más y luego de otro minuto aparecen tres, luego cuatro y así sucesivamente. Una porción de comida le dura un minuto a cada paloma y en caso de que no haya suficiente comida para todas, comen las que llegaron primero. Las palomas no dejan de comer. Si hay N porciones de comida, ¿Cuántas palomas se pueden alimentar con al menos una porción de comida?"




Para resolverlo creé una clase llamada Pigeon con las propiedades eat y fed:

  1. class Pigeon(object):
  2.     def __init__(self): 
  3.         self.yum = 0 #porciones consumidas
  4.     def eat(self, portions):
  5.         if portions > 0:
  6.             self.yum += 1
  7.             portions -= 1
  8.         return portions #porciones que quedan
  9.     def fed(self):
  10.         return self.yum > 0 #devuelve False o True


El procedimiento para hallar la solución es el siguiente:


  1. def alimentar_aves(porciones):
  2.         minuto = 0
  3.         aves = []
  4.         while porciones > 0:
  5.                 minuto += 1
  6.                 for i in range(minuto):
  7.                         aves.append(Pigeon())
  8.                 for ave in aves:
  9.                         porciones = ave.eat(porciones)
  10.                         if porciones == 0:
  11.                                 break
  12.         cont = 0
  13.         for paloma in aves:
  14.                 if paloma.fed():
  15.                         cont += 1
  16.         return cont

Y como el ejemplo de la figura de arriba, el resultado para cinco porciones es:


  1. alimentar_aves(5)
  2. >>> 3


No hay comentarios.:

Publicar un comentario