From 46584930f6bcaf38a15ab7af27de01033f289d37 Mon Sep 17 00:00:00 2001 From: luise jedlitschka Date: Mon, 6 Feb 2023 15:29:12 +0100 Subject: [PATCH] =?UTF-8?q?Docu=20erg=C3=A4nzt=20und=20Python=20aktualisie?= =?UTF-8?q?rt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++- Roundabouts.py | 3 +++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c93c22..407ee19 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,57 @@ # SimulationTuplesort -ein Tool zur Simulation der verschiedenen Sortierverfahren in einer Anlage; picksort und tuplesort \ No newline at end of file +ein Tool zur Simulation der verschiedenen Sortierverfahren in einer Anlage: +- picksort und +- tuplesort. + +## Picksort-Verfahren +![Picksort-Verfahren](video/picksort.gif) + + + +Das Picksort Verfahren holt sich bei jeder Umdrehung das kleinstmögliche Objekt aus dem ersten Kreisel heraus. Daraus ergibt sich im zweiten Kreisel eine sortierte List der Bügelträger + +Zur Vermittelung der einzelnen Schritte wurden folgender Unittest umgesetzt: + +```python + lK = Roundabout() + lK.addList([6, 5, 4, 3, 2, 1]) + rK = Roundabout(1) + sw = Switch(lK, rK) + p = RoundaboutPair(lK, rK, sw) + self.assertEqual(lK.content(), [1, 2, 3, 4, 5, 6]) + + p.runSimulation() + self.assertEqual(p.show(), ([], [1, 2, 3, 4, 5, 6])) +``` +## Tuplesort-Verfahren +![Tuplesort-Verfahren](video/tuplesort.gif) + +Das Tupelsort Verfahren arbeitet mit sog. Tupels. Dies sind Zahlenfolge die immer Aufsteigend sind. +Eine Zahlenfolge wie z.B. 1, 3, 5, 10, 2, 4, 7, 5, 8 kann in 3 Tupels unterteilt werden. Immer wenn sich in den Zahlen ein Sprung nach unten befindet definiert man ein Tupelende. Aus dieser Zahlenfolge ergeben sich beispielsweise die 3 Tuple 1,3, 5, 10 | 2, 4, 7 | 5, 8 . +Durch zusammenfügen der Einzeltupel ergibt sich am Ende eine sortierte folge. +Das Tupelsort verfahren hat bei einer grösseren Anzal von Elementen im Kreisel eine bessere Sortierperformance. + +Zur Vermittelung der einzelnen Schritte wurden folgender Unittest umgesetzt: + +```python + lK = Roundabout() + lK.addList([3, 2, 1]) + rK = Roundabout(1) + rK.addList([6, 5, 4]) + sw = Switch(lK, rK) + p = RoundaboutPair(lK, rK, sw) + sw.set_to_right() + self.assertEqual(p.show(), ([1, 2, 3], [6, 5, 4])) + + p.sortStepTupleSort() + self.assertEqual(p.show(), ([1, 2], [5, 4, 3, 6])) + p.sortStepTupleSort() + self.assertEqual(p.show(), ([5, 2, 1], [4, 3, 6])) + p.sortStepTupleSort() + self.assertEqual(p.show(), ([5, 2], [3, 6, 1, 4])) + p.sortStepTupleSort() + self.assertEqual(p.show(), ([6, 5, 3, 2], [1, 4])) + p.sortStepTupleSort() + self.assertEqual(p.show(), ([], [1, 2, 3, 4, 5, 6])) +``` diff --git a/Roundabouts.py b/Roundabouts.py index e63f996..0405213 100644 --- a/Roundabouts.py +++ b/Roundabouts.py @@ -234,6 +234,9 @@ class TestObjectMethods(unittest.TestCase): p.sortStep() self.assertEqual(p.show(), ([1, 2], [5, 4, 3, 6])) + p.sortStep() + self.assertEqual(p.show(), ([1, 2], [5, 4, 3, 6])) +