
                        REPRODUCCIN EN EL LABORATORIO

Los cientficos de un laboratorio de investigacin biolgica desean llevar a
cabo una serie de experimentos para estudiar el ciclo de vida de una especie de
organismos celulares sencillos.

Un organismo est formado por un cierto nmero de clulas, procedentes de la
biparticin (o fisin) de una clula original.  Cada clula tendr un
identificador entero mayor que 0. Las clulas de un mismo organismo no pueden
tener identificadores repetidos. Durante el resto del enunciado iremos viendo
otras caractersticas relevantes de las clulas.

La morfologa de tales organismos puede representarse mediante rboles
binarios.  Por ejemplo el rbol


                                 7 
                              /     \
                           1           3
                         /   \       /   \ 
                        2     5     4     6
                       / \   / \   / \   / \
                     17  10 8  13 11 14 9  12


representa un organismo cuya clula 7 es la original, la 1 y la 3 son el
resultado de la biparticin de sta (podemos decir que son sus "hijas" o que la
7 es la "madre" de estas), la 2 y la 5 son las hijas de la 1, etc.

Consideramos que cada clula puede fisionarse, como mximo, una vez en su vida.

Por otra parte, puede ocurrir el proceso inverso, que un organismo pierda
clulas progresivamente. Si se queda sin ninguna, diremos que ha muerto.

Por ltimo, los organismos pueden reproducirse de manera sexual, es decir,
pueden aparecer organismos nuevos a partir de parejas de organismos ya
existentes.

Un experimento tpico se organiza de la siguiente manera.  Se dispone de una
poblacin inicial de N organismos, numerados correlativamente desde 1 en
adelante (N es un natural mayor o igual que 2).  Segn avanza el experimento,
dicha poblacin va evolucionando mediante los procesos que acabamos de exponer.
A continuacin, mostramos en detalle dichos procesos.


REPRODUCCIN SEXUAL
-------------------

Durante el experimento se pueden producir rondas de emparejamientos, en cada
una de las cuales cada organismo vivo elige un candidato vivo (o es elegido
como tal) para reproducirse.  Nunca se repiten los emparejamientos a lo largo
de las sucesivas rondas y cuando un organismo ya no tenga candidatos sin
repetir simplemente deja de reproducirse. En cada ronda, tienen prioridad de
eleccin los organismos de menor identificador y cada organismo elige al de
menor identificador que an no se haya reproducido con l.

Por ejemplo, supongamos que los 6 organismos vivos con menores identificadores
en una determinada ronda son, en orden, x1..x6. Si los siguientes
emparejamientos ya han ocurrido:

- x1 se ha reproducido ya con x2 y x3,

- x2 ya se han reproducido ya con x4 

- x3 ya se han reproducido ya con x5

entonces los nuevos emparejamientos sern: x1-x4, x2-x3 y x5-x6.


Dados dos organismos compatibles (ms adelante diremos en qu consiste esta
propiedad), supondremos que su reproduccin dar lugar a un nuevo organismo,
que tambin podr crecer, decrecer y reproducirse. El identificador del nuevo
organismo ser el primero que no haya sido usado con anterioridad. Segn el
ejemplo anterior, si antes de la ronda el mximo de los identificadores
asignados era xM, entonces los nuevos organismos sern respectivamente xM+1,
xM+2 y xM+3.

De cara a la reproduccin, cada clula de un organismo puede ser activa o
pasiva (obviamente esto es otra informacin relevante para una clula).  Las
clulas nacidas de una fisin heredan esta propiedad de sus madres.

Por otra parte, definimos la "interseccin" de dos organismos x1 y x2 como una
estructura formada por una clula en cada posicin donde hubiera clulas tanto
en x1 como en x2. Tambin definimos que x1 y x2 son "compatibles" si el nmero
de clulas de su interseccin es mayor o igual que int((tam(x1) + tam(x2))/4).

Por ltimo, decimos que el organismo resultante de la reproduccin de dos
organismos compatibles x1 y x2 (nos referiremos a l como el "hijo" de estos)
ser el formado por una estructura igual a la interseccin de x1 y x2, ms un
clon de cada una de las clulas activas de ambos que no estn en la
interseccin (cada clon ha de quedar en la misma posicin en el nuevo organismo
que su original), ms el mnimo numero de clulas pasivas necesarias para que
dichas clulas activas conserven su posicin sin quedar desconectadas.

Las clulas del nuevo organismo heredan la propiedad de ser activas o pasivas
mediante las siguientes reglas:

- las que proceden de una interseccin: sern pasivas si las dos clulas
  originales en las posiciones correspondientes son pasivas; en caso contrario
  (es decir, si alguna es activa) sern activas

- las que no proceden de una interseccin: sern activas si proceden de
  clulas activas de los organismos originales; el resto sern pasivas (como
  ya hemos dicho)


Los identificadores de las nuevas clulas procedentes de la reproduccin de dos
organismos x1 y x2, con x1<x2, se asignan con arreglo a los siguientes
criterios:

- las que procedan de una interseccin heredarn el id de las correspondientes
  en x1;

- del resto, las que procedan de x1 tambin heredarn su id; 

- las que procedan de x2 tomarn, con la prioridad marcada por su recorrido en
  preorden, valores correlativos a partir del valor siguiente al mximo de los
  identificadores de las clulas de x1


Ejemplo: si tenemos dos organismos compatibles x1 y x2 


        x1:             3                   x2:        4          
                    /       \                      /       \    
                   6         4                    7         5   
                 /   \      / \                           /   \           
                2     8    7  13                         6     9          
                     / \                                / \  
                   17   12                             1   10


(comprobad que int((tam(x1) + tam(x2))/4) = 4; tam(interseccin) = 5), donde
las clulas activas de x1 son 3 y 12 y las de x2 son 7, 9 y 10, su hijo ser

                        3                 
                    /       \       
                   6         4       
                    \       / \
                     8     7   13
                      \     \
                       12    18

Justificacin:

- las clulas 3, 6, 4, 7 y 13 proceden de la interseccin (3, 6, y 13 son
  activas; 4 y 7 son pasivas),

- la clula 12 es activa y procede de la 12 de x1 (activa que no est en la
  interseccin),

- la clula 8 es pasiva, procede de x1 y es necesaria para que 12 no quede
  desconectada

- la clula 18 es activa y procede de la 10 de x2 (activa que no est en la
  interseccin); 18 es el siguiente al mximo de los identificadores de clula
  en x1 (17)


CRECIMIENTO DE UN ORGANISMO
---------------------------

Durante el experimento, un organismo puede sufrir un "estirn" (por condiciones
ambientales, de alimentacin, etc. que no necesitamos conocer para esta
prctica).  Cada estirn viene dado por la fisin de todas las clulas del
organismo que no se hayan fisionado hasta el momento del estirn. Respecto a la
poblacin inicial, supondremos que las clulas que tienen hijas ya se han
fisionado y el resto no.

Cada clula nueva procedente de una fisin tomar como identificador el valor
siguiente al mximo de los identificadores de las clulas del organismo
correspondiente. Si varias clulas de un mismo organismo nacen en el mismo
estirn, la asignacin de identificadores se realiza ordenadamente de izquierda
a derecha segn su posicin en el rbol.

Por ejemplo, el estirn del siguiente organismo 

                              3
                           /      
                         6        

da lugar a 

                              3
                          /      
                         6         
                       /   \    
                      7     8   



DECRECIMIENTO Y MUERTE DE UN ORGANISMO
--------------------------------------

Durante el experimento, un organismo puede sufrir un "recorte" (tambin por
condiciones ambientales, de alimentacin, etc.) . Cada recorte viene dado por
la prdida de todas las clulas del organismo que no tengan ninguna hija.

Como cada clula solo se puede fisionar una vez como mximo, el proceso de
decrecimiento de un organismo es irreversible.  Decimos que un organismo muere
si pierde su clula original.

Ntese que sta la nica forma que permite disminuir el nmero de organismos
del experimento. De la misma forma, la reproduccin sexual es la nica manera
que permite aumentar el nmero de organismos del experimento.


De cara a futuros crecimientos o decrecimientos, trataremos a los organismos
obtenidos mediante reproduccin sexual como a los de la poblacin inicial del
experimento, independientemente de la historia de sus progenitores. Es decir,
un organismo "recin nacido" podr crecer hasta que sufra su primer recorte.
Tambin supondremos que aquellas de sus clulas que tengan hijas ya se han
fisionado y el resto no, etc.


RANKING
-------

Como resumen del experimento, se ha de poder obtener en todo momento un ranking
de los organismos que hayan existido (vivos o muertos) basado en la
reproduccin de los mismos. El ranking estar ordenado decrecientemente por el
nmero de hijos producidos; en caso de empate, aparecer primero el organismo
de identificador ms pequeo.


FIN DEL EXPERIMENTO
-------------------

El experimento termina si se cumple alguna de las siguientes condiciones: 

- se mueren todos los organismos 

- la poblacin "histrica" (contando organismos vivos y muertos) llega a un
  cierto valor mximo fijado de antemano; si esto ocurre durante una ronda de
  reproduccin, sta no se completa

- los supervisores del experimento lo finalizan manualmente


SE PIDE
-------

Disear un programa modular razonablemente eficiente para gestionar
experimentos como los descritos.

En primer lugar, debe leer los valores enteros N (poblacin inicial del
experimento, mayor que 1) y M (mximo permitido de poblacin histrica, mayor
que N).

Seguidamente leer los N organismos iniciales. Cada organismo ha de tener al
menos una clula (es decir, ha de estar vivo).

Despus tendr que ir procesando las diversas tareas que se le pidan. stas
podrn ser las siguientes:

1) Aplicar un estirn a un subconjunto de organismos. Se proporciona una
   secuencia de enteros no repetidos entre 1 y M.  Los organismos que estn
   vivos (y no hayan empezado a sufrir recortes) en el momento de realizar la
   tarea, cuyos identificadores estn en la secuencia, sufrirn el
   correspondiente estirn.

2) Aplicar un recorte a un subconjunto de organismos. Se proporciona una
   secuencia de enteros no repetidos entre 1 y M.  Los organismos que estn
   vivos en el momento de realizar la tarea, cuyos identificadores estn en la
   secuencia, sufrirn el correspondiente recorte.

3) Aplicar una ronda de reproduccin a todos los organismos. Actualizar el
   ranking consecuentemente. Escribir el nmero de hijos nacidos en la ronda.

4) Obtener el ranking de reproduccin de los organismos. Para cada organismo,
   vivo o muerto, que haya existido hasta el momento de la consulta se ha de
   obtener un listado de sus emparejamientos que hayan producido hijos.  Cada
   emparejamiento estar representado por el identificador de su compaero y el
   del hijo. El listado vendr ordenado por el identificador de los hijos.

5) Consultar el estado de un subconjunto de organismos. Se proporciona una
   secuencia de enteros no repetidos entre 1 y M.  Se escribir la estructura
   celular de los organismos existentes (vivos o muertos) en el momento de
   realizar la tarea cuyos identificadores estn en la secuencia.

Tras el fin del proceso, se ha de indicar la causa (ver seccin "FIN DEL
EXPERIMENTO"). Si ha sido porque la poblacin ha llegado a M organismos (mximo
permitido), se han de realizar dos consultas adicionales:

- Obtener el ranking

- Consultar el estado de los organismos nacidos en la ltima ronda de
  reproduccin (atencin: sta ha podido ser incompleta)
  

La forma de comunicarnos con el programa para que realice dichas tareas ser
parecida a la del caso de estudio "Cubeta" que aparece en la sesin 8 de
laboratorio. Podis disear un esquema provisional que ya refinaris cuando
conozcis el juego de pruebas pblico.

En das sucesivos se completarn los detalles que se hayan podido pasar por
alto en este enunciado y se publicarn las aclaraciones oportunas.

La sintaxis *exacta* de los datos y resultados, acompaada del juego de pruebas
pblico, se conocer tres semanas antes del da de entrega de la prctica.
Hasta entonces no podris implementar de forma definitiva las operaciones de
lectura y escritura necesarias para los tipos que utilicis, aunque s podris
especificarlas.
