Python :: Aufgabe #83 :: Lösung #1

1 Lösung Lösung öffentlich
#83

Das Tortenproblem mit Tortenstücken ( Möglichkeiten )

Fortgeschrittener - Python von klhlubek19 - 16.07.2015 um 13:50 Uhr
k Kinder erhalten t Torten.
Die Torten sind alle gleich groß, haben aber
verschiedene Geschmacksrichtungen:
a) Ananas, b) Brombeer, c) Chocolate, d) Datteln, e) Erdbeer, usw.
Die Torten werden zunächst je in k Stücke geteilt.
Nun erhält jedes Kind (1: Anna; 2: Bert; 3: Claude; 4: Daphne; ...)
von jeder Torte ein Stück.

Danach beginnen die Kinder zu tauschen, denn vielleicht mögen nicht alle jede
Sorte gleich gut. Beim Tauschen achten die Kinder darauf, dass immer jedes
Kind gleich viele Tortenstücke behält.

Auf wie viele Arten können die Kinder die Tortenstücke nun so verteilen,
dass immer noch alle Kinder gleich viele Stücke haben?
Alle Möglichkeiten sind auszugeben.
#1
vote_ok
von eisheiliger (3750 Punkte) - 26.04.2021 um 16:01 Uhr
Quellcode ausblenden Python-Code

"""
#83: Das Tortenproblem mit Tortenstücken (Möglichkeiten)
k Kinder erhalten t Torten. Die Torten werden zunächst je in k Stücke geteilt. Nun erhält jedes Kind von jeder Torte ein
Stück. Danach beginnen die Kinder zu tauschen, denn vielleicht mögen nicht alle jede Sorte gleich gut. Beim Tauschen
achten die Kinder darauf, dass immer jedes Kind gleich viele Tortenstücke behält. Auf wie viele Arten können die Kinder
die Tortenstücke nun so verteilen, dass immer noch alle Kinder gleich viele Stücke haben?
"""
import itertools
import numpy as np


def torten_tausch(ar2dim, ar3dim, kind):
    tausch = []
    for h in range(kind - 1):
        for i in range(0, len(ar3dim)):
            for j in range(0, len(ar2dim)):
                if np.max(np.array([sum(x) for x in zip(*ar3dim[i])]) + np.array([ar2dim[j]])) <= kind:
                    tausch.append(list(itertools.chain([(ar2dim[j])], ar3dim[i])))
        ar3dim = tausch
        tausch = []
    print("Für den Tausch ergeben sich", len(ar3dim), "Möglichkeiten")
    for i in range(0, len(ar3dim)):
        print(ar3dim[i])


def torten_konstellationen(kinder, torten):
    to_arr = []
    ar_ot = []
    ar_ot1 = []
    for i in range(torten):
        to_arr.append(i)
    var = [p for p in itertools.product(to_arr, repeat=torten)]
    var = (np.array(list(var)))
    for i in range(0, len(var)):
        if sum(var[i]) == torten:
            ar_ot.append([list(var[i])])
            ar_ot1.append(list(var[i]))
    print("Bei", kinder, "Kindern und", torten, "Torten gibt es je Kind", len(ar_ot), "mögliche Verteilungen")
    for i in range(0, len(ar_ot)):
        print(ar_ot1[i])
    torten_tausch(ar_ot1, ar_ot, kinder)


def prf_eingabe(ki, to):
    if ki == 1 or to == 1:
        print(ki, "Kind(er) und", to, "Torte(n), d. h. in dieser Konstellation ist kein Tausch möglich")
    else:
        torten_konstellationen(to, ki)


prf_eingabe(1, 2)
prf_eingabe(2, 1)
prf_eingabe(3, 2)
prf_eingabe(3, 3)
prf_eingabe(3, 4)
prf_eingabe(4, 2)
prf_eingabe(4, 3)


Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben