Grundsätzlich ist die Zeichenfolge eine run-length encoding des Bildes: Alternierende Zeichen in der Zeichenfolge sagen, wie oft ein Leerzeichen und wie oft ein Ausrufezeichen hintereinander gezeichnet werden soll. Hier ist eine Analyse der verschiedenen Elemente dieses Programms:
Die codierte Zeichenkette
Die ersten 31 Zeichen der Zeichenfolge ignoriert werden. Der Rest enthält Anweisungen zum Zeichnen des Bildes. Die einzelnen Zeichen legen fest, wie viele Leerzeichen oder Ausrufezeichen nacheinander gezeichnet werden.
Outer for-Schleife
Diese Schleife geht über die Zeichen in der Zeichenfolge. Jede Iteration erhöht den Wert b
um eins und weist das nächste Zeichen in der Zeichenfolge a
zu.
Inner for-Schleife
Diese Schleife zieht einzelne Zeichen, und ein Zeilenumbruch, wenn es erreicht das Ende der Zeile. Die Anzahl der Zeichen ist a - 64
. Der Wert c
geht von 10 bis 90 und wird auf 10 zurückgesetzt, wenn das Zeilenende erreicht ist.
Die putchar
Dies kann neu geschrieben werden als:
++c;
if (c==90) { //'Z' == 90
c = 10; //Note: 10 == '\n'
putchar('\n');
}
else {
if (b % 2 == 0)
putchar('!');
else
putchar(' ');
}
Es das entsprechende Zeichen zieht, je nachdem, ob b
gerade oder ungerade ist, oder ein Zeilenumbruch, wenn nötig.
Screenshot der Ausgabe? –
Es ist nur verschleiert C ... es gibt ganze Gesellschaften, die sich dieser Art von Wahnsinn verschrieben haben. – Mark
Ausgabe: http: // Codepad.org/ngiITeZ4 –