El tren debe partir si se cumplen una de las siguientes condiciones:
- Pasan 15 segundos sin que nadie suba o baje
- El trene esta lleno y nadie quiere bajarse en parada actual
En el caso de que pasen 15 segundos sin activad estoy de acuerdo contigo. El tren se tiene que ir porque estamos en la primera condicion la cual es independiente de si alguien se "aviva"
de querer bajar despues de pasados los 15 segundos. La condicion es cierta y debe partir el tren.
Mi caso es un incumplimiento de la segunda condicion, la cual en realidad son dos que deben cumplirse en simultaneo. La solucion chequea por la primera (esta lleno) y asume que la segunda se cumple por darle prioridad a los que se bajan (lo cual no es cierto).
Capaz con el diagrama que adjunto queda mas claro por que no es cierto que darle prioridad a los que bajan resulta en que el tren no tenga gente para bajar.
En el diagrama vemos como un pasajero actua frente a dos situaciones iguales (con la unica diferencia de si el tren se llena o no).
Como se ve en la flecha de abajo, el tren decide irse cuando habia alguien para bajarse esperando por el accept. Mientras que en la flehca de arriba, si bien le toma mas tiempo, el pasajero logra bajarse en su estacion. Esta claro en el diagrama que es no es el caso de que el tren espera 15 segundos para irse y recien ahi el pasajero decide bajarse.
Este caso borde lleva a condiciones extremas por ejemplo: El tren tiene 49 personas que se quieren bajar en la parada siguiente pero no se les dio la cpu para pedir el encuentro. El tren llega a la parada donde inmediatamente habia una persona para subir. El tren lo acepta. Los 49 piden encuentro para bajar. El tren se va, estando muy poquito tiempo o casi sin estar en la estacion, y cargado de gente.
Se puede entonces assegurar la segunda condicion de partida? Asi como esta en la solucion para mi no. Pero proponga una solucion. Debemos exigir que los pasajeros nos avisen a donde se quieren bajar antes de bajarse, de esta forma sabemos la cantidad de gente "indeterminada" y sabemos cuantas personas se quieren bajar en donde. Ahora al momento de chequear la segunda condicion el tren esta en condiciones de hacerlo "bien". Debe chequear que la cantidad de indeterminados sea 0 (si no lo fuera no tenemos manera de saber si es cierta la condicion o no, arriesgariamos sacar el tren de la estacion cuando no deberiamos). Chequear que no exista alguien que se quiera bajar. En cualquiera de los dos casos, se debe usar mas tiempo de los 15 segundos disponibles para que ellos se bajen o no, se determinen o no. No hacer esto lleva a que el tren parta de la estacion cuando no deba (incumplimiento de la segunda condicion, crei que era verdadera pero resulto ser falsa). Es importante destacar que lo que planteo no sufre del caso borde demostrado ya que el tren siempre que decide por segunda condicion sabe que no falta gente por determinarse y sabe que nadie de los determinados esta para bajar.