Ein Team hat beschlossen, jeden Morgen Croissants für jedermann mitzubringen. Es sollte nicht jedes Mal dieselbe Person sein, daher sollte es ein System geben, mit dem bestimmt werden kann, wer als nächstes an der Reihe ist. Der Zweck dieser Frage ist es, einen Algorithmus zu bestimmen, mit dem entschieden wird, wer morgen Croissants bringt.
Einschränkungen, Annahmen und Ziele:
- Wessen Croissants an der Reihe sind, wird am Vortag bekannt gegeben.
- An einem bestimmten Tag sind einige Leute abwesend. Der Algorithmus muss jemanden auswählen, der an diesem Tag anwesend sein wird. Angenommen, alle Abwesenheiten sind einen Tag im Voraus bekannt, sodass der Croissant-Käufer am Vortag ermittelt werden kann.
- Insgesamt sind die meisten Menschen an den meisten Tagen anwesend.
- Im Interesse der Fairness sollte jeder so oft Croissants kaufen wie die anderen. (Grundsätzlich wird davon ausgegangen, dass jedes Teammitglied den gleichen Betrag für Croissants ausgeben kann.)
- Es wäre schön, ein Element der Zufälligkeit oder zumindest der wahrgenommenen Zufälligkeit zu haben, um die Langeweile eines Dienstplans zu lindern. Dies ist keine harte Einschränkung, sondern eher eine ästhetische Beurteilung. Dieselbe Person sollte jedoch nicht zweimal hintereinander ausgewählt werden.
- Die Person, die die Croissants mitbringt, sollte dies im Voraus wissen. Wenn also Person P an Tag D Croissants mitbringen soll, sollte dies an einem früheren Tag festgestellt werden, an dem Person P anwesend ist. Wenn beispielsweise der Croissant-Bringer immer am Vortag ermittelt wird, sollte es sich um eine der Personen handeln, die am Vortag anwesend sind.
- Die Anzahl der Teammitglieder ist so gering, dass Speicher- und Rechenressourcen praktisch unbegrenzt sind. Beispielsweise kann sich der Algorithmus auf eine vollständige Historie derjenigen stützen, die in der Vergangenheit Croissants mitgebracht haben. Bis zu ein paar Minuten Rechenzeit auf einem schnellen PC pro Tag wären in Ordnung.
Dies ist ein Modell eines Problems der realen Welt. Sie können also die Annahmen hinterfragen oder verfeinern, wenn Sie der Meinung sind, dass sie das Szenario besser modellieren.
Herkunft 1: Finden Sie heraus, wer die Croissants von Florian Margaine kauft.
Herkunft 2: Finden Sie heraus, wer die Croissants von Gilles kaufen wird.
Diese Frage ist dieselbe Version wie die von Gilles und wurde als Experiment erneut bei Programmierern veröffentlicht, um zu sehen, wie die verschiedenen Communities einer Programmierherausforderung begegnen.