<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 hnicht 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 2druckt 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>Adem 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 ldie 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 hden String in der linken Zelle finden können. Dies wird dann *durch ($^F- 1)die nächste Eingabe minus 1-mal dupliziert .
ASetzt das Array dieser Zelle in der rechten Zelle auf die Stapelung, die durch geteilt wird "h". SVerbindet das Stack-Array mit "d"und setzt den Stack-String auf diesen Wert. A"h"S"d"Ersetzt einfach hs durch ds, um die Datenzeilen zu bilden. Jetzt gehen hwir 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. vDazu müssen wir ihm voranstellen.