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