Wortel , 77 51 byte
<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Saat mengerjakan ini, saya menemukan bug dengan h
tidak bekerja dan memperbaikinya)
Memotong beberapa byte dengan memperpendek html serta menggunakan "split, join", bukan "replace"
Cobalah online! , gunakan opsi baris perintah -d
untuk melihat AST (Catatan: ini menggunakan penerjemah simpul baru, sehingga versi yang lebih lama di situs web tidak dapat menjalankan ini.)
Program ini mengambil input 0-diindeks dan dalam urutan terbalik, karena sifat aneh Carrot, sehingga 3 2
mencetak tabel 3 × 4.
Jalankan program seperti itu, ./carrot -f prog.carrot input.txt
Pada dasarnya membuat baris tajuk, kemudian data baris pada sel lain dari kebun (rekaman 2D), dan menyatukannya bersama-sama.
Wortel bekerja pada pita 2D, yang disebut taman. Setiap sel di taman terdiri dari tiga mode tumpukan, string, float, array. Ada nilai untuk setiap mode, yang disebut "tumpukan" (catatan: keliru). Tumpukan ini mulai kosong. Ketika sel berada pada mode tertentu, perintah berikut akan memengaruhi tumpukan yang sesuai dengan mode ini, misalnya dalam mode float, operasi akan memengaruhi stack float. Dan tentu saja, ada perintah untuk beralih antar mode. Mode ini penting karena setiap operator dapat kelebihan beban untuk setiap mode dan setiap jenis argumen.
Selain itu, ada dua mode tambahan (ini hanya memengaruhi perintah, bukan tumpukan langsung), mode normal dan mode caret. Mode normal berfungsi normal, di mana ada operator yang mengambil argumen dan memengaruhi tumpukan secara langsung. Dalam mode caret, (hampir) setiap karakter ditafsirkan secara harfiah sebagai string, dan kemudian ditambahkan / ditambahkan sesuai dengan tumpukan. Mode caret dimulai / diakhiri dengan caret (append) atau down-caret (prepend).
Wortel dimulai di sel di kebun, dalam mode string-string, dan dalam mode caret.
Dimulai dengan caret-mode, string <th>A
ditambahkan ke stack-string yang awalnya kosong. Kemudian ikuti *
perintah yang menduplikatnya $
, input, kali. Kemudian <tr>
ditambahkan ke stack-string oleh penggunaan down-caret v
. Ini menciptakan baris tajuk tabel.
Untuk membuat baris data, kami menduplikasi header ke sel lain. l
memindahkan IP ke sel kosong kanan, dan +
menambahkan (^h)
string dalam sel ke kiri (pada dasarnya menyalinnya ke sel di sebelah kanan). ()
memulai subkulit, program Wortel baru dengan rekaman yang hampir sama, dan ^
keluar dari mode caret sehingga kita bisa h
mendapatkan string di sel kiri. Ini kemudian *
digandakan oleh ($^F- 1)
, input berikutnya minus 1, kali.
Masih di sel kanan, A
atur array sel ini ke tumpukannya "h"
. S
bergabung dengan array stack dengan "d"
dan mengatur string stack ke nilai ini. A"h"S"d"
benar-benar hanya mengganti h
s dengan d
s untuk membentuk baris data. Sekarang h
kita pindah ke sel awal yang mulai.
Sekarang kita menambahkan string stack sel ke kanan menggunakan sel ini +(^l)
. Yang tersisa hanyalah menambahkan <table>
tag, jadi kami melakukan ini dengan v
menambahkannya terlebih dahulu.