![]() |
http://www.checkio.org/ |
"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:
- class Pigeon(object):
- def __init__(self):
- self.yum = 0 #porciones consumidas
- def eat(self, portions):
- if portions > 0:
- self.yum += 1
- portions -= 1
- return portions #porciones que quedan
- def fed(self):
- return self.yum > 0 #devuelve False o True
El procedimiento para hallar la solución es el siguiente:
- def alimentar_aves(porciones):
- minuto = 0
- aves = []
- while porciones > 0:
- minuto += 1
- for i in range(minuto):
- aves.append(Pigeon())
- for ave in aves:
- porciones = ave.eat(porciones)
- if porciones == 0:
- break
- cont = 0
- for paloma in aves:
- if paloma.fed():
- cont += 1
- return cont
Y como el ejemplo de la figura de arriba, el resultado para cinco porciones es:
- alimentar_aves(5)
- >>> 3
No hay comentarios.:
Publicar un comentario