summaryrefslogtreecommitdiff
path: root/mobile.py
diff options
context:
space:
mode:
Diffstat (limited to 'mobile.py')
-rwxr-xr-xmobile.py76
1 files changed, 0 insertions, 76 deletions
diff --git a/mobile.py b/mobile.py
deleted file mode 100755
index 481325c..0000000
--- a/mobile.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-# getestet mit Python 2.7.8 und 3.4.2
-'''Verteilt und gleicht ein Mobile aus'''
-
-from math import floor
-
-# 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]
-
-def split(fig):
- '''gibt eine Liste zurück, in der die Elemente
-aus `fig` auf 4er-Balken aufgeteilt sind'''
- _fig = fig[:]
- if len(_fig) > 4:
- temp = [[] for j in range(4)]
- for k, item in enumerate(_fig):
- temp[k % 4].append(item)
-
- _fig = list(filter(None, temp))
-
- temp = []
- for afig in _fig:
- summe = 0
- for (_, k) in afig:
- summe += k
-
- myweight = summe
- # Gewicht Inhalt
- temp.append((myweight, split(afig)))
-
- _fig = temp
- return _fig
-
-def weight(fig):
- '''gibt ein ausgeglichenes Mobile zurück'''
- res = []
-
- if len(fig) % 2 == 1:
- # ist die Anzahl an Elementen ungerade,
- # muss eines - hier das mittlerste - auf die Position 0
- middle = int(floor(len(fig) / 2))
- res.append((0, fig[middle][1]))
- del fig[middle]
-
- for j in range(len(fig)):
- # 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
-
-def mobile(liste):
- '''erstellt ein Mobile aus einer Liste von Figuren'''
- inp = list([(j, j) for j in liste]) # der Input wird aufbereitet
- splitted = split(inp)
- weighted = weight(splitted)
- return weighted
-
-if __name__ == "__main__":
- print(mobile(FIGUREN))