Un equipo ha decidido que cada mañana alguien debe traer croissants para todos. No debería ser la misma persona cada vez, por lo que debería haber un sistema para determinar de quién es el turno. El propósito de esta pregunta es determinar un algoritmo para decidir de quién será el turno de traer croissants mañana.
Restricciones, suposiciones y objetivos:
- El turno para traer croissants se determinará la tarde anterior.
- En un día cualquiera, algunas personas están ausentes. El algoritmo debe elegir a alguien que estará presente ese día. Suponga que todas las ausencias se conocen con un día de anticipación, por lo que el comprador de croissant se puede determinar en la tarde anterior.
- En general, la mayoría de las personas están presentes la mayoría de los días.
- En aras de la imparcialidad, todos deben comprar croissants tantas veces como los demás. (Básicamente, suponga que cada miembro del equipo tiene la misma cantidad de dinero para gastar en croissants).
- Sería bueno tener algún elemento de aleatoriedad, o al menos percepción de aleatoriedad, para aliviar el aburrimiento de una lista. Esto no es una restricción difícil: es más un juicio estético. Sin embargo, no se debe elegir a la misma persona dos veces seguidas.
- La persona que trae los croissants debe saber de antemano. Entonces, si la persona P debe traer croissants el día D, este hecho debe determinarse en algún día anterior donde la persona P está presente. Por ejemplo, si el bringer croissant siempre se determina el día anterior, entonces debe ser una de las personas que están presentes el día anterior.
- El número de miembros del equipo es lo suficientemente pequeño como para que los recursos de almacenamiento y computación sean efectivamente ilimitados. Por ejemplo, el algoritmo puede basarse en una historia completa de quién trajo croissants en el pasado. Hasta unos pocos minutos de cómputo en una PC rápida todos los días estaría bien.
Este es un modelo de un problema del mundo real, por lo que puedes desafiar o refinar las suposiciones si crees que modelan mejor el escenario.
Origen 1: Averigua quién va a comprar los croissants por Florian Margaine.
Origen 2: Averigüe quién va a comprar el croissants de Gilles.
Esta pregunta es la misma versión que la de Gilles, y se ha vuelto a publicar en Programadores como un experimento para ver cómo las diferentes comunidades enfrentan un desafío de programación.