#!/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)