<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Während ich daran arbeitete, entdeckte ich einen Fehler, der h
nicht funktionierte und behebte ihn)
Einige Bytes durch Kürzung des HTML-Codes und Verwendung von "Teilen, Verbinden" anstelle von "Ersetzen" abgegolten
Probieren Sie es online! Verwenden Sie die Befehlszeilenoption -d
, um den AST anzuzeigen.
Dieses Programm verwendet die Eingabe 0-indiziert und in umgekehrter Reihenfolge, da Carrot seltsam ist, und 3 2
druckt so eine 3 × 4-Tabelle.
Führen Sie das Programm wie folgt aus: ./carrot -f prog.carrot input.txt
Im Grunde genommen erstellt die Kopfzeile dann die Datenzeilen in einer anderen Zelle des Gartens (2D-Band) und verkettet sie miteinander.
Karotte arbeitet auf einem 2D-Band, Garten genannt. Jede Zelle im Garten besteht aus drei Stapelmodi: String, Float und Array. Für jeden Modus gibt es einen Wert, der als "Stapel" bezeichnet wird (Anmerkung: falsche Bezeichnung). Diese Stapel beginnen leer. Befindet sich eine Zelle in einem bestimmten Modus, wirken sich die folgenden Befehle auf den Stapel aus, der diesem Modus entspricht. Beispielsweise wirken sich die Vorgänge im Float-Modus auf den Stapel-Float aus. Und natürlich gibt es Befehle zum Umschalten zwischen den Modi. Die Modi sind wichtig, da jeder Operator für jeden Modus und jeden Argumenttyp überladen werden kann.
Darüber hinaus gibt es zwei zusätzliche Modi (diese wirken sich nur auf die Befehle aus, nicht direkt auf den Stapel), den normalen Modus und den Caret-Modus. Der Normalmodus funktioniert normal, wenn Operatoren Argumente aufnehmen und den Stapel direkt beeinflussen. Im Caret-Modus wird (fast) jedes Zeichen buchstäblich als Zeichenfolge interpretiert und später dem Stapel entsprechend vorangestellt / angehängt. Der Caret-Modus wird mit Carets (anhängen) oder Downcarets (voranstellen) gestartet / beendet.
Karotte beginnt in einer Zelle im Garten, im Stapelmodus und im Caret-Modus.
Beginnend im Caret-Modus wird der String <th>A
dem anfänglich leeren Stack-String hinzugefügt. Dann folgt der *
Befehl, der es dupliziert $
, die Eingabe, mal. Dann <tr>
wird der Stack-Zeichenkette mit dem Downcaret vorangestellt v
. Dadurch wird die Kopfzeile der Tabelle erstellt.
Um die Datenzeilen zu erstellen, duplizieren wir den Header in eine andere Zelle. Verschiebt l
die IP- +
Adresse in die rechte leere Zelle und hängt (^h)
die Zeichenfolge in der Zelle links an (im Wesentlichen durch Kopieren in die rechte Zelle). ()
Startet eine Subshell, ein neues Carrot-Programm mit fast demselben Band, und beendet den ^
Caret-Modus, damit wir h
den String in der linken Zelle finden können. Dies wird dann *
durch ($^F- 1)
die nächste Eingabe minus 1-mal dupliziert .
A
Setzt das Array dieser Zelle in der rechten Zelle auf die Stapelung, die durch geteilt wird "h"
. S
Verbindet das Stack-Array mit "d"
und setzt den Stack-String auf diesen Wert. A"h"S"d"
Ersetzt einfach h
s durch d
s, um die Datenzeilen zu bilden. Jetzt gehen h
wir zur linken Startzelle.
Nun hängen wir die Stapelzeichenfolge der Zelle mit rechts an diese Zelle an +(^l)
. Alles, was übrig bleibt, ist das Hinzufügen des <table>
Tags. v
Dazu müssen wir ihm voranstellen.