[Python-es] Ejercicio Bolsas de caramelos
Pau Cervera
pau.cervera en gmail.com
Jue Ene 13 20:41:00 CET 2011
Nos cuesta un poco entender la pregunta así formulada. Aunque sea sobre
caramelos, la pregunta nos la tienes que dar un poco masticada. Porqué sino
la respuesta podría ser difícil de digerir:
class Caramelo(object):
_count = {}
def __new__(cls):
if cls in Caramelo._count:
Caramelo._count[cls] += 1
else:
Caramelo._count[cls] = 1
return object.__new__(cls)
@classmethod
def count(cls):
if cls in Caramelo._count:
return Caramelo._count[cls]
else:
return 0
def __mul__(self, other):
Caramelo._count[self.__class__] += other - 1
return self
def __rmul__(self, other):
return self.__mul__(other)
def __lmul__(self, other):
return self.__mul__(other)
class RegalizRojo(Caramelo):
pass
class RegalizNegro(Caramelo):
pass
bolsa_a = [RegalizRojo(), RegalizRojo(), 2 * RegalizNegro()]
bolsa_b = [4 * RegalizRojo(), RegalizNegro()]
print RegalizRojo.count(), RegalizNegro.count()
-----
Pau
Python..., what else?
2011/1/13 lasizoillo <lasizoillo en gmail.com>
> El día 13 de enero de 2011 16:57, pixu kideak <pixukideak en gmail.com>
> escribió:
> > Bueno pues para resolver el problema había pensado lo siguiente:
> > Contar en memoria con todos los datos ( todas las bolsas existentes y
> éstas
> > con los caramelos que contienen y sus cantidades )
> > Recorrer secuencialmente todas las bolsas viendo si tienen el caramelo
> que
> > me interesa. En caso afirmativo contabilizar esa cantidad en el contador
> y
> > así hasta recorrer todas las bolsas.
> > Simplemente quería saber si existía alguna forma "divina" pero viendo que
> > las Bolsas no guardan ninguna lógica en su composición; creo que toca
> > recorrerlas todas viendo si contienen el caramelo o no :-)
> > Saludos y gracias ;-)
>
> Vale, ahora entiendo el problema ;-)
>
> Si que hay solución y por supuesto no es nada divina. En algunos casos
> será mejor y en otros peor. Puedes mantener una especie de inventario
> de todos los caramelos. Bastaría con un diccionario en el que la clave
> es el caramelo y el valor el número de unidades en las bolsas
> registradas.
>
> Ese dato se puede ir llenando cada vez que registras una bolsa de
> caramelo. Pero también deberías actualizarlo al eliminar bolsas de
> caramelos. Por lo cual, estas haciendo más trabajo cada vez que dás de
> alta/baja una bolsa de caramelos y los contadores de cada tipo de
> caramelo ocupan espacio (no creo que importe mucho, pero hay que ser
> precisos). La ventaja es que se podrían hacer las consultas de los
> caramelos en O(1).
>
> Saludos:
>
> Javi
>
> >
> > 2011/1/13 lasizoillo <lasizoillo en gmail.com>
> >>
> >> El día 13 de enero de 2011 13:38, pixu kideak <pixukideak en gmail.com>
> >> escribió:
> >> >
> >> > Me han planteado un problemilla para realizarlo con Python pero no
> tengo
> >> > muy
> >> > claro por dónde atacar para resolverlo de manera eficiente.
> >>
> >> Sería un buen punto de partida la forma ineficiente por dos motivos:
> >> * El primero porque muestras que te has esforzado en intentarlo y
> >> tienes afán de superación en vez de más cara que espalda como muestran
> >> algunos que quieren que les hagan los deberes.
> >>
> >> > El problema es el siguiente:
> >> > "Tengo distintas bolsas de caramelos, cada bolsa digamos que tiene un
> >> > nombre; (BolsaA, BolsaB ... )y cada bolsa se compone de caramelos
> >> > diferentes
> >> > (RegalizRojo, RegalizNegro, Chicle,Tiburón ...).
> >> > "El tipo de caramelo puede estar tanto en un modelo de bolsa cómo en
> >> > otra"
> >> > Lo que deseo realizar es, que el usuario pueda introducir cualquier
> tipo
> >> > de
> >> > caramelo y le muestre todas las unidades que se necesitan de ese tipo.
> >>
> >> * El segundo porque la redacción en lenguaje natural no compila en
> >> nuestras mentes. Seguramente un código ineficiente nos ayudaría a
> >> comprender el enunciado del problema. Unos tests o casos de prueba
> >> serían maravillosos. Ahora mismo las unidades que responden a la gran
> >> pregunta, creo que son 42. Lo que no se es cual es la gran pregunta de
> >> la vida, el universo y todo lo demás (incluyendo este problema ;-)
> >>
> >> Saludos:
> >>
> >> Javi
> >> _______________________________________________
> >> Python-es mailing list
> >> Python-es en python.org
> >> http://mail.python.org/mailman/listinfo/python-es
> >> FAQ: http://python-es-faq.wikidot.com/
> >
> >
> > _______________________________________________
> > Python-es mailing list
> > Python-es en python.org
> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> >
> >
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110113/266c6452/attachment.html>
Más información sobre la lista de distribución Python-es