diff options
Diffstat (limited to 'src/buffet_lotterie.py')
| -rwxr-xr-x | src/buffet_lotterie.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/buffet_lotterie.py b/src/buffet_lotterie.py new file mode 100755 index 0000000..82a7796 --- /dev/null +++ b/src/buffet_lotterie.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# getestet mit Python 2.7.8 und 3.4.2 +'''Findet die optimale Lösung für die Buffet-Lotterie''' + +from math import floor + +ANZAHL_TEILNEHMER = 6 +SILBEN = ['In', 'for', 'ma', 'tik', 'kann', 'uns', 'wei', 'sen', 'wer', 'als', \ + 'Nächs', 'ter', 'kommt', 'zum', 'Spei', 'sen'] + +def denke(anzahl_teilnehmer, silben): + '''Findet die optimale Lösung für die Buffet-Lotterie''' + teilnehmer = anzahl_teilnehmer + fehlt_noch = float("inf") + einfluss = 0 + offset = 0 + while fehlt_noch > 0: + runden = floor((len(silben) + offset) / teilnehmer) + # runden Runden ist das Geburtstagskind dran, bis einer gehen darf + + offset = ((len(silben) + offset - 1) % teilnehmer) % (teilnehmer - 1) + # nach runden Runden fängt Teilnehmer Nummer `offset` an, + # 0 ist das Geburtstagskind + + einfluss += runden + # Geburtstagskind kann insgesamt `runden`-mal dem Essen näher kommen + fehlt_noch = (offset - 1) % (teilnehmer - 1) + 1 + # um jetzt dran sein zu müssen, hätte das Geburtstagskind + # `fehlt_noch`-mal zwei SILBEN sagen müssen + + print("Nach " + str(runden) + " Runden fängt der " + str(offset + 1) + \ + ". an. Es sind dann noch " + str(teilnehmer - 1) + \ + " Teilnehmer im Spiel.") + if runden > 0: # falls das Geburtstagskind dran kam + print("Es fehlten " + str(fehlt_noch) + " bis zum Geburtstagskind") + if fehlt_noch < einfluss: + print("Das Geburtstagskind muss erst " + str(fehlt_noch) + \ + "-mal 'zwei Silben' und dann nur noch 'eine Silbe'" + \ + "sagen, bis es dran ist.") + break + + teilnehmer -= 1 # einer geht + +if __name__ == "__main__": + denke(ANZAHL_TEILNEHMER, SILBEN) |
