Beiträge von JeeK im Thema „80 x 50 Pixel im Textmodus malen“

    Es geht (hier) weder ums Eintippen, noch um die Programmkürze. Der Doppelpunkt am Zeilenanfang ist schlicht sinnlos, es sei denn, man möchte per Einrückungen mit Leerzeichen die Struktur im Progamm hervorheben. Davon kann man aber in der hier präsentierten Spaghettischreibweise wohl nicht ausgehen. ;)

    Ist doch in 2 Minuten abgetippt: (sogar mit den Doppelpunkten, deren Sinn ich immer noch nicht begreife, ist aber der Stil von BIF )

    Ja eh, es geht ums Prinzip.

    Das sind da 2 Minuten bei *allen*, die es Abtippen und in Summe dann ein Zeitaufwand, der uns allen quasi aufgezwungen wird. Es war ja auch nur eine Bitte, doch den Lesern entgegenkommender zu sein, speziell wenn man eine Lösung der Leserschaft schmackhaft machen möchte und damit den Zugang dazu möglichst einfach zu gestalten.

    80 x 50 Pixel:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Hier hab ich noch mal eine gekürzte Poke-Version.
    Man kann das Problem also in circa 4-5 Zeilen und mit einem Feld lösen.

    Für jene, die das überhaupt ausprobieren wollen, wäre es den Forumsteilnehmern nett gegebenüber, solche Programme in einem Code-Abschnitt (Copy und Paste geht auch aus einem VICE-Screen) oder in einem txt-Anhang textuell anzugeben. ;)

    Gerne kann man noch eine challenge draus machen, aber ich glaube, der Code von Neptun ganz ohne if ist der schnellste. Ich kann mir nicht vorstellen, dass es in Basic wesentlich besser geht.

    Ein bisschen schon. Da springt mein Optimierungsdrang schon etwas an ...

    Die Punkte im Einzelnen:

    • Array H(3) als Array H(1,1). Dann kann muss man den Index nicht umständlich mit Multiplikation errechnen, sondern kann direkt nur mittels AND 1 aus X oder Y ableiten. Der Interpreter kann mit den zwei Indizes schneller rechnen.
    • Die Errechnung von N kann zumindest bei der Y-Komponente mit AND MK (blendet Bit 0 aus) und halbiert den Wert nicht, weil er ohnehin mit C multipliziert wird, welcher dann nicht mehr 40 sein muss, sondern auf 20 reduziert werden kann. Man spart eine Division.
    • Die Initialisierung der Variablen wird mit den häufigst genutzten begonnen. DIM N,X,Y,... legt diese mehrfach in GOSUB 2 etc. verwendeten Variablen zuerst an und ergibt damit auch den schnellsten Zugriff.
    • Ein Array XR(15,15) hat die XOR-Funktion, die in Z 4 gebraucht wird als Tabelle abgebildet. Es braucht die Initialisierung dann halt länger, weil 256 Werte vorberechnet werden müssen. Ist halt nur notwendig, wenn die XOR-Funktion wirklich gebraucht wird.
    • Die Test-Funktion in Z 6 vermeidet die Variable N1 und macht alles in einer Zeile. Das Ergebnis (in Variable N) ist -1 (statt 1), wenn gesetzt und 0 wenn nicht. Das ist ist konsistent mit der sonstigen Konvention in BASIC für logische Ausdrücke (True/False).

    Es ist noch eine Zeitmessung fürs das Zeichnen des Koordinatenkreuzes inkludiert, um etwaige Verbesserungen zu messen.

    Die Laufzeit (fürs Kreuzzeichnen) reduziert sich von 5,27 s auf 4,63 s, das sind 12 % Ersparnis. Immerhin. Es ist gerade so viel, dass man "merkt", dass es schneller ist, wenn auch nicht bahnbrechend. ;)