From 0af018edf0bbd1a4fe1611bc5b8ce80c0483c640 Mon Sep 17 00:00:00 2001 From: schneefux Date: Sun, 16 Nov 2014 14:30:27 +0100 Subject: Lösung Aufgabe Mobile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mobile.py | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/mobile.py b/mobile.py index 2d62e91..a5c5bdd 100755 --- a/mobile.py +++ b/mobile.py @@ -2,11 +2,12 @@ from math import floor import random -# python dict in der Form {Position: Gewicht}, wobei Position auf der linken Seite negativ ist -mobile = {-4: {-2: 1, 1: 2}, -1: 2, 2: 3, 4: 2} +# python list mit Elementen in der Form (Position, [Gewicht oder Liste]), wobei Position auf der linken Seite negativ ist +mobile = [(-4, [(-2, [(0, 1)]), (1, [(0, 2)])]), (-1, [(0, 2)]), (2, [(0, 3)]), (4, [(0, 2)])] figuren = [2, 3, 1, 2, 3] +# gibt eine Liste zurück, in der die Elemente aus `fig` auf 4er-Balken aufgeteilt sind def split(fig): _fig = fig[:] if len(_fig) > 4: @@ -18,25 +19,44 @@ def split(fig): b = [] for f in _fig: - weight = sum(f) - b.append({weight: split(f)}) + summe = 0 + for (j, k) in f: + summe += k + + weight = summe + # Gewicht Inhalt + b.append((weight, split(f))) _fig = b return _fig +# gibt ein ausgeglichenes Mobile zurück def weight(fig): - res = dict() + res = [] + + if len(fig) % 2 == 1: + # ist die Anzahl an Elementen ungerade, muss eines - hier das mittlerste - auf die Position 0 + middle = floor(len(fig) / 2) + res.append((0, fig[middle][1])) + del fig[middle] + for j in range(len(fig)): - #res[j] = {-list(fig[j][len(fig) - j - 1].keys())[0], fig[j]} - print(list(fig)[j])#[len(fig) - j - 1]) - #res[-list(fig)[len(fig) - j - 1]] = fig[j] + # Die Position des Elements wird auf das Gewicht des gegenüberliegenden Elements gesetzt, + # sodass sich jeweils das Element mit dem Gegenüber ausgleicht + side = -1 if j < len(fig) / 2 else 1 + opposite = len(fig) - j - 1 + + figure = list(fig[j]) + if type(figure[1]) is list: + figure[1] = weight(figure[1]) + + # Position Inhalt + element = (fig[opposite][0] * side, figure[1]) + res.append(element) return res -r = list(range(1, 6)) -random.shuffle(r) -print(r) +r = list([(j, j) for j in figuren]) # der Input wird aufbereitet f = split(r) -print(f) w = weight(f) print(w) -- cgit v1.3.1