Cà rốt , 77 51 byte
<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Trong khi làm việc với điều này, tôi đã phát hiện ra một lỗi h
không hoạt động và đã sửa nó)
Đánh gôn một số byte bằng cách rút ngắn html cũng như sử dụng "split, tham gia" thay vì "thay thế"
Hãy thử trực tuyến! , sử dụng tùy chọn dòng lệnh -d
để xem AST (Lưu ý: điều này sử dụng trình thông dịch nút mới, vì vậy phiên bản cũ hơn trên trang web không thể chạy cái này.)
Chương trình này lấy đầu vào 0 được lập chỉ mục và theo thứ tự đảo ngược, vì bản chất kỳ lạ của Carrot, do đó 3 2
in bảng 3 × 4.
Chạy chương trình như vậy, ./carrot -f prog.carrot input.txt
Về cơ bản tạo hàng tiêu đề, sau đó các hàng dữ liệu trên một ô khác của khu vườn (băng 2D) và nối chúng lại với nhau.
Cà rốt hoạt động trên băng 2D, được gọi là vườn. Mỗi ô trên vườn được tạo thành từ ba chế độ ngăn xếp, chuỗi, float, mảng. Có một giá trị cho mỗi chế độ, được gọi là "ngăn xếp" (lưu ý: viết sai). Những ngăn xếp này bắt đầu trống rỗng. Khi một ô ở chế độ cụ thể, các lệnh sau sẽ ảnh hưởng đến ngăn xếp tương ứng với chế độ này, ví dụ ở chế độ float, các hoạt động sẽ ảnh hưởng đến float float. Và tất nhiên, có các lệnh để chuyển đổi giữa các chế độ. Các chế độ rất quan trọng vì mỗi toán tử có thể bị quá tải cho từng chế độ và từng loại đối số.
Ngoài ra, có hai chế độ bổ sung (những chế độ này chỉ ảnh hưởng đến các lệnh chứ không ảnh hưởng trực tiếp đến ngăn xếp), chế độ bình thường và chế độ caret. Chế độ bình thường hoạt động bình thường, trong đó có các toán tử tham gia vào các đối số và ảnh hưởng trực tiếp đến ngăn xếp. Trong chế độ caret, (hầu hết) mọi ký tự được hiểu theo nghĩa đen là một chuỗi và sau đó được thêm vào / nối thêm vào ngăn xếp. Chế độ caret được bắt đầu / kết thúc bằng dấu mũ (nối thêm) hoặc dấu mũ xuống (trả trước).
Cà rốt bắt đầu trong một tế bào trong vườn, ở chế độ chuỗi ngăn xếp và ở chế độ caret.
Bắt đầu ở chế độ caret, chuỗi <th>A
được thêm vào chuỗi stack trống ban đầu. Sau đó, theo *
lệnh sao chép nó $
, đầu vào, thời gian. Sau đó <tr>
được thêm vào chuỗi ngăn xếp bằng cách sử dụng dấu mũ v
. Điều này tạo ra hàng tiêu đề của bảng.
Để tạo các hàng dữ liệu, chúng tôi nhân đôi tiêu đề sang một ô khác. l
di chuyển IP sang ô trống bên phải và +
nối (^h)
chuỗi trong ô bên trái (về cơ bản sao chép nó vào ô bên phải). ()
bắt đầu một subshell, một chương trình Carrot mới với gần như cùng một băng và ^
thoát ra khỏi chế độ caret để chúng ta có thể h
lấy chuỗi trong ô bên trái. Điều này sau đó được *
nhân đôi bởi ($^F- 1)
, đầu vào tiếp theo trừ đi 1 lần.
Vẫn ở ô bên phải, A
đặt mảng của ô này thành ngăn xếp của nó được phân chia theo "h"
. S
nối mảng stack bằng cách "d"
và đặt chuỗi stack thành giá trị này. A"h"S"d"
thực sự chỉ thay thế h
s bằng d
s để tạo thành các hàng dữ liệu. Bây giờ h
chúng ta di chuyển đến ô bắt đầu bên trái.
Bây giờ chúng ta nối chuỗi ngăn xếp của ô vào bên phải ô này bằng cách sử dụng +(^l)
. Tất cả những gì còn lại là thêm <table>
thẻ, vì vậy chúng tôi thực hiện điều này bằng cách đăng ký v
trước.