Wir sollen mehrere Ketten sortieren, dabei ist ein guter Anfang schon vorgegeben. Hier werden alle Inboxen einer nullbasierten Kette inklusive der abschließenden Null gespeichert.
Kachel 20 könnte man direkt um Eins vermindern, da die gespeicherte Null für die Ausgabe uninteressant ist. Im Pirnzip ist es egal, ob man von vorne oder hinten beginnt. Ich würde einfach Kachel 0 mit allen anderen vergleichen und den geringsten Wert in Kachel 0 speichern. Damit hier kein Wert verloren geht, muss eine andere Kachel als Zwischenspeicher herhalten. Anschließend wird Kachel 1 mit allen nachfolgenden Kacheln verglichen. Also benötigen wir noch eine weitere Kachel, die nach jedem Vergleichdurchlauf um Eins erhöht wird.
Montag ist allerdings kein Tag zum Sortieren finde ich, also mach ich später weiter.
Keine Ahnung, was der Chef da für einen schwarzen Balken im Gesicht hat. Wir machen weiter!
Zum Vergleichen brauchen wir sogar noch eine Kachel mehr, als ich das letzte Mal geschrieben habe. So nehme ich Kachel 21 für die erste und Kachel 22 für die zweite Zahl. Die Kachel 20 rühre ich nicht weiter an, da man hier die Kettenlänge auslesen kann.
Ich erwarte zwar nicht, dass eine nullterminierte Kette hier nur aus einer Null besteht, aber sicherheitshalber baue ich eine Abfrage dafür ein. In dem Fall wird nichts ausgegeben und es geht mit der nächsten Kette weiter.
Das Grundgerüst des Vergleichens entsteht. Die zweite Zahl wird von der ersten abgezogen.
Sollte das Ergebnis der Rechnung weder Null noch negativ sein, werden beide Zahlen miteinander vertauscht, wobei Kachel 23 hier als Zwischenspeicher herhält.
Nach jedem Vergleich wird Kachel 22 erhöht, damit die nächste Zahl in der Kette mit der ersten verglichen wird. In Zeile 13 bis 15 prüfen wir nun, ob Kachel 22 und 20 gleich groß sind, dann wäre das Ende der Kette erreicht.
Wie man sieht habe ich mich für dieses Level dagegen entschieden, die Kacheln eine Bezeichnung zu verpassen. So als kleine Hommage an die ersten Level, wo das noch nicht ging.
Wenn das Ende der Kette erreicht ist, befindet sich der kleinste Wert an erster Stelle. Also wird Kachel 21 auf die zweite Stelle gesetzt und das Vergleichen geht weiter.
Die Berechnungen sollen enden, wenn in Kachel 22 der Wert der letzten Kachel erreicht wurde.
Nun können wir mit der Ausgabe anfangen. Hier nur die erste Kachel.
Per Schleife gehen wir nun die gesamte Kette durch bis zur Kachel mit der abschließenden Null. Diese wird nicht ausgegeben. Durch einem Jump geht es zurück zum Programmanfang, zur nächsten Kette.
Das Problem befindet sich in Zeile 31. Hier habe ich nicht den Fall bedacht, dass durch eine Kette mit genau einem Wert die Kachel 22 einen größeren Wert als Kachel 20 besitzt und somit immer weiter Kacheln verglichen werden. Bis wir zu einer Kachel kommen, die keinen Wert zugewiesen bekam.
Also subtrahiere ich nun Kachel 22 von Kachel 20 anstatt andersherum wie bisher und vergleiche nun nicht nur, ob das Ergebnis Null beträgt, sondern auch, ob es negativ ist.
Nun kommt der Angestellte auch über diese Stelle hinaus.
Optimierungsziele haben wir zwar keine erreicht, aber dafür trennt uns vom Ziel der Story nur noch der Abspann.
Jetzt verstehe ich auch die früheren Sequenzen. Zumindest glaube ich das. Es geht um den "Krieg" der Menschen gegen die Maschinen, aber nicht in dem Sinne wie man es aus Terminator oder Matrix kennt, sondern bezogen auf dem Arbeitsmarkt.
Optimierungsziele sind zwar noch nicht alle erreicht, aber vielleicht schau ich mir die betreffenden Level später nochmal an und reiche das nach. Natürlich können auch weiterhin Leserlösungen eingereicht werden. Die Story jedoch ist hiermit abgeschlossen!