Marchew , 77 51 bajtów
<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Pracując nad tym, odkryłem błąd, który h
nie działa i naprawiłem go)
Otworzył niektóre bajty, skracając html, a także używając opcji „podziel, połącz” zamiast „zamień”
Wypróbuj online! , użyj opcji wiersza polecenia-d
aby wyświetlić AST (Uwaga: używa to nowego interpretera węzłów, więc starsza wersja na stronie nie może tego uruchomić).
Ten program pobiera indeksowane wejście 0 w odwrotnej kolejności, z powodu dziwnej natury Marchewki, w ten sposób 3 2
drukując tabelę 3 × 4.
Uruchom program w ten sposób, ./carrot -f prog.carrot input.txt
Zasadniczo tworzy wiersz nagłówka, a następnie wiersze danych w innej komórce ogrodu (taśma 2D) i łączy je razem.
Marchew działa na taśmie 2D, zwanej ogrodem. Każda komórka w ogrodzie składa się z trzech trybów stosu: ciąg, pływak, tablica. Dla każdego trybu istnieje wartość, zwana „stosem” (uwaga: błędna nazwa). Te stosy zaczynają się puste. Gdy komórka znajduje się w określonym trybie, następujące polecenia wpłyną na stos, który odpowiada temu trybowi, na przykład w trybie zmiennoprzecinkowym operacje wpłyną na zmiennoprzecinkowe stosu. I oczywiście są polecenia do przełączania między trybami. Tryby są ważne, ponieważ każdy operator może być przeciążony dla każdego trybu i każdego typu argumentu.
Ponadto istnieją dwa dodatkowe tryby (wpływają tylko na polecenia, a nie na stos bezpośrednio), tryb normalny i tryb karetki. Tryb normalny działa normalnie, gdy operatorzy przyjmują argumenty i wpływają bezpośrednio na stos. W trybie karetki (prawie) każdy znak jest interpretowany dosłownie jako ciąg znaków, a następnie jest dodawany / dodawany odpowiednio do stosu. Tryb Caret jest uruchamiany / kończony za pomocą karetek (dołączanie) lub kuracji opadających (dołączanie).
Marchew zaczyna się w celi w ogrodzie, w trybie strun i w trybie karetki.
Począwszy od trybu karetki ciąg <th>A
jest dodawany do początkowo pustego ciągu stosu. Następnie następuje *
polecenie, które go powiela $
, dane wejściowe, czasy. Następnie <tr>
jest dodawany do łańcucha stosu za pomocą znaku dolnego v
. Spowoduje to utworzenie wiersza nagłówka tabeli.
Aby utworzyć wiersze danych, duplikujemy nagłówek do innej komórki. l
przenosi adres IP do pustej prawej komórki i +
dołącza (^h)
ciąg do komórki po lewej stronie (zasadniczo kopiując go do komórki po prawej). ()
uruchamia podpowłokę, nowy program Marchewki z prawie taką samą taśmą, i ^
wychodzi z trybu karetki, abyśmy mogli h
pobrać ciąg z lewej komórki. Jest to następnie *
duplikowane przez ($^F- 1)
kolejne wejście minus 1 razy.
Nadal w prawej komórce A
ustawia tablicę tej komórki na układanie stosów podzielone przez "h"
. S
łączy tablicę stosu przez "d"
i ustawia ciąg stosu na tę wartość. A"h"S"d"
tak naprawdę po prostu zamienia h
s na d
s, aby utworzyć wiersze danych. Teraz h
przechodzimy do lewej komórki początkowej.
Teraz dołączamy ciąg stosu komórki po prawej stronie do tej komórki za pomocą +(^l)
. Wystarczy dodać <table>
tag, więc robimy to, v
przygotowując go.