summaryrefslogtreecommitdiff
path: root/src/buffet_lotterie.py
blob: fb072134ddb9daf83fdb4305ddbf05ad60b17a9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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)