summaryrefslogtreecommitdiff
path: root/mobile.py
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2014-11-16 14:30:27 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2014-11-16 14:30:27 +0100
commit0af018edf0bbd1a4fe1611bc5b8ce80c0483c640 (patch)
treea921b77c9a575dbd602ef44ea960fa4bfbb2e16c /mobile.py
parentc71a804a73851a805a6283c5afef685aefb62f85 (diff)
downloadbwinf-33-0af018edf0bbd1a4fe1611bc5b8ce80c0483c640.tar.gz
bwinf-33-0af018edf0bbd1a4fe1611bc5b8ce80c0483c640.zip
Lösung Aufgabe Mobile
Diffstat (limited to 'mobile.py')
-rwxr-xr-xmobile.py44
1 files 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)