Wir können nun die Bodenkacheln beschriften!
Das Initialisieren eines Zwischenwertes ist bereits vorgeben. Das Zahlenpaar wird zwischengespeichert.
In Hinblick auf die Laufzeitoptimierung speichern wir nun zuerst die beiden Zahlen, sofern notwendig. Ist eine von beiden Null können wir dies auch gleich als Ergebnis ausgeben und machen mit dem nächsten Zahlenpaar weiter.
Das Zwischenergebnis benenne ich sinnvoll um und verzichte auf einen Schritt, indem ich gleich den Wert des Produktes mit dem der zweiten Zahl überschreibe.
Geändert von Torin (14. März 2017 um 09:35 Uhr)
Geändert von Torin (14. März 2017 um 09:37 Uhr)
Geändert von Torin (14. März 2017 um 13:58 Uhr)
Gehen wir das Programm nochmal neu an, setzen die Schritte, die bereits vorgegeben waren und speichern das Zahlenpaar.
Zahl 2 wird wieder mit sich selbst in der Anzahl von Zahl 1 addiert und im Produkt gespeichert. Dieses Mal in 16 Zeilen.
Der hier markierte JUMP überprüft ob Zahl 2 Null beträgt. Wenn wir diesen rausnehmen, funktioniert die Rechnung weiterhin und wir haben das Programm auf 15 Zeilen minimiert!
Dies hat jedoch zur Folge, dass unser Angestellter unnötigt Berechnungen anstellt, wenn die zweite Zahl mal wirklich Null ist.
Die unnötigen Schritten nehmen wir aber gerne in Kauf, wenn wir dadurch die Größenoptimierung erreichen!
Geändert von Torin (14. März 2017 um 14:04 Uhr)
Für den Countdown hab ich auch eine Platzlösung mit nur einer Kachel:
Achtung Spoiler:
Wir können es ja so machen: Wenn ich in einem Level beide Optimierungen bereits erreicht habe sind keine Spoiler notwendig und jeder Leser kann mir seine Lösung hier einreichen.
Also die Lösung von Yucatan:
Man kann jedes Programm im Game in den Zwischenspeicher kopieren. Dies sieht dann so aus, wie Yucatan im letzten Beitrag gepostet hat. Dies lässt sich auf selben Wege auch ins Spiel einfügen.
Interessant, hier wird die Zahl gleich ausgegeben und dann erst überprüft, ob diese Null, negativ oder positiv ist. Anschließend wird entsprechend gehandelt.
Verbraucht ein paar Schritte mehr als bei meine 10-Befehle-Lösung.
Geändert von Torin (14. März 2017 um 18:57 Uhr)
Der Jump in Zeile 8 kann natürlich noch optimiert werden, sehe ich gerade
Als erstes beschrifte ich die Kacheln. Zur Abwechslung nehme ich mal nicht Kachel #0. In Kette werde ich die Summe einer Kette speichern und der allmächtige Nullmacher setzt den Wert zurück bevor es mit der nächsten Kette weitergeht.
Wir nehmen den eingehenden Wert und wenn dieser Null beträgt wird die Kette ausgegeben. Zur spaßigen Mitte kommen wir gleich.
Addieren, überschreiben, wiederholen. Bis zur nächsten Null.
Das läuft ganz gut...
... und erfüllt die Bedingungen der Größenoptimierung.
Geändert von Torin (14. März 2017 um 20:58 Uhr)
Ich fange an Beschriftungen und Kommentare in den Programmen zu mögen. ^-^
Geändert von Torin (15. März 2017 um 10:50 Uhr)
Die Laufzeitoptimierung sieht maximal 109 Schritte vor. Meine beste Lösung bisher benötigt noch 121 Schritte.
Also initialisieren wir das Produkt und speichern die beiden Zahlen.
Dann überspringen wir die ganzen Befehle, sollte eine der beiden Zahlen Null betragen.
Meine neue Lösung ähnelt meiner ersten sehr, doch dieses mal speicher ich gleich ins Produkt und gehe an diese Stelle zurück.
So ganz durchdacht habe ich das anscheinend nicht, da so mehr Schritte notwendig sind.
Vielleicht spare ich Schritte wenn ich zuerst prüfe, ob eine der beiden Zahlen Null beträgt und dann erst das Produkt initialisiere.
Geändert von Torin (15. März 2017 um 11:20 Uhr)