Ejercicio 4: Criaderos

Criaderos

Necesitamos modelar la forma en que algunos criaderos de perros se comportan a la hora de cruzar sus animales.

Ya tenemos representados a los perros, de los cuales nos interesa saber si esHembra, su velocidad, si es adulto y su status, como puede verse en la biblioteca.

Sabemos que los criaderos pueden cruzar perros en base a estrategias diversas, lo cual impacta, entre otras cosas, en las características que tendrá la cría de ambos perros en caso de que la cruza sea exitosa.

No todos los criaderos trabajan igual, en particular queremos modelar a los criaderos responsables y a los criaderos irresponsables, que se diferencian principalmente en cómo eligen los perros a cruzar y cómo reaccionan en caso de no poder cruzarlos exitosamente.

Se espera que todos los criaderos entiendan los siguientes mensajes:

  • recibirPerro(perro), que incorpora al perro al criadero.
  • perros(), que retorna el conjunto de perros que tiene el criadero.
  • cruzar(estrategia), que recibe una estrategia de cruza para luego producir el efecto que corresponda.

A continuación se describe el detalle de cómo deberían comportarse los criaderos y estrategias a representar:

Criaderos

En general para la cruza de perros, los criaderos usan la estrategia de cruza indicada para obtener la cría de dos de sus perros (una hembra y un macho). La cría en cuestión debería incorporarse a los perros del criadero.

Para elegir a la madre, los criaderos irresponsables sólo eligen una de las hembras que hay en el criadero, y para el padre uno de los machos. En cambio los criaderos responsables además aseguran, tanto para el padre como para la madre, que sean el macho y hembra con más status de entre los adultos que tienen.

Otra cosa a tener en cuenta respecto a los criaderos irresponsables es que en caso de que fallen al intentar cruzar los dos perros elegidos con la estrategia de cruza indicada, abandona a ambos perros (dejando de formar parte de los perros del criadero) y vuelve a intentar con otros perros (hasta que tenga éxito o se quede sin perros para cruzar).

Estrategias de Cruza

Existe más de una forma de cruzar animales, en particular se pide representar las siguientes:

  • cruzaPareja: la cría resultante de la cruza debería ser un perro cuyos valores para velocidad y fuerza equivalgan a la suma de los valores correspondientes de sus padres dividido 2. Por ejemplo, si la madre tiene velocidad 8 y el padre tiene velocidad 6, la cría tendrá velocidad 7.
  • hembraDominante: la cría resultante de la cruza debería ser un perro cuyos valores para velocidad y fuerza equivalgan al valor correspondiente de la madre sumado al 5% del valor correspondiente del padre. Por ejemplo, si la madre tiene velocidad 8 y el padre tiene velocidad 10, la cría tendrá velocidad 8.5.
  • underdog: la cría resultante de la cruza debería ser un perro cuyos valores para velocidad y fuerza equivalgan al mínimo valor correspondiente de sus padres, multiplicado por 2. Por ejemplo, si la madre tiene velocidad 8 y el padre tiene velocidad 5, la cría tendrá velocidad 10.

También debe tenerse en cuenta que para que la cruza sea exitosa, los perros deben ser compatibles. En general esto se cumple cuando son de distinto sexo y ambos son adultos, pero además en el caso de la estrategia de hembra dominante, la fuerza de la hembra debería superar a la fuerza del macho.

No debería importar el orden en el que se parametricen el macho y la hembra a la estrategia de cruza, el resultado debería ser equivalente.

El sexo de la cría no es determinístico (va a ser aleatorio independientemente de la estrategia usada), y lógicamente no se espera que sean adultos al nacer.


Además de lo anterior, se pide definir los métodos crearCriaderoIrresponsable y crearCriaderoResponsable en el objeto creadorDeCriaderos que retornen el criadero correspondiente en base a tu modelo para su uso desde las pruebas.

Tenés que iniciar sesión antes de empezar a enviar tus soluciones

¡Ups! Tu solución no se puede ejecutar

  • Revisá que tu programa no tenga recursión o algún bucle infinito
  • Revisá que tengas conexión a internet
  • Esperá un rato e intentalo nuevamente

Estamos procesando tu solución

Si no se muestra automáticamente en unos segundos, presioná F5