Una squadra ha deciso che ogni mattina qualcuno dovrebbe portare cornetti per tutti. Non dovrebbe essere sempre la stessa persona, quindi dovrebbe esserci un sistema per determinare di chi è il turno successivo. Lo scopo di questa domanda è determinare un algoritmo per decidere chi sarà il turno di portare i croissant domani.
Vincoli, ipotesi e obiettivi:
- Di chi è il turno di portare i cornetti sarà determinato il pomeriggio precedente.
- In un dato giorno, alcune persone sono assenti. L'algoritmo deve scegliere qualcuno che sarà presente quel giorno. Supponiamo che tutte le assenze siano note con un giorno di anticipo, quindi l'acquirente di cornetti può essere determinato il pomeriggio precedente.
- Nel complesso, la maggior parte delle persone è presente nella maggior parte dei giorni.
- Nell'interesse dell'equità, tutti dovrebbero comprare i croissant tante volte quanto gli altri. (Fondamentalmente, supponi che ogni membro del team abbia la stessa quantità di denaro da spendere per i croissant.)
- Sarebbe bello avere qualche elemento di casualità, o almeno la casualità percepita, al fine di alleviare la noia di un elenco. Questo non è un vincolo difficile: è più un giudizio estetico. Tuttavia, la stessa persona non dovrebbe essere scelta due volte di seguito.
- La persona che porta i cornetti dovrebbe sapere in anticipo. Quindi, se la persona P deve portare cornetti il giorno D, allora questo fatto dovrebbe essere determinato in un giorno precedente in cui la persona P è presente. Ad esempio, se il cornetto per cornetti viene sempre determinato il giorno prima, dovrebbe essere una delle persone presenti il giorno prima.
- Il numero dei membri del team è abbastanza piccolo che le risorse di archiviazione e elaborazione sono effettivamente illimitate. Ad esempio l'algoritmo può fare affidamento su una storia completa di chi ha portato i cornetti in passato. Fino a pochi minuti di calcolo su un PC veloce ogni giorno sarebbe OK.
Questo è un modello di un problema del mondo reale, quindi sei libero di sfidare o affinare le ipotesi se pensi che modellino meglio lo scenario.
Origine 1: Scopri chi acquisterà i croissant di Florian Margaine.
Origine 2: Scopri chi acquisterà i croissant di Gilles.
Questa domanda è la stessa versione di Gilles, ed è stata ripubblicata su Programmers come esperimento per vedere come le diverse comunità affrontano una sfida di programmazione.