Carota , 77 51 byte
<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Mentre lavoravo su questo, ho scoperto un bug che h
non funzionava e l'ho risolto)
Golf di alcuni byte accorciando l'html e usando "Dividi, Unisci" invece di "Sostituisci"
Provalo online! , utilizzare l'opzione della riga di comando-d
per visualizzare l'AST (Nota: questo utilizza il nuovo interprete di nodi, quindi la versione precedente sul sito Web non può eseguirlo.)
Questo programma accetta l'input indicizzato 0 e in ordine inverso, a causa della strana natura di Carrot, 3 2
stampando così una tabella 3 × 4.
Esegui il programma in questo modo, ./carrot -f prog.carrot input.txt
Fondamentalmente crea la riga di intestazione, quindi le righe di dati su un'altra cella del giardino (nastro 2D) e le concatena insieme.
La carota lavora su un nastro 2D, chiamato giardino. Ogni cella del giardino è composta da tre modalità stack, stringa, float, array. C'è un valore per ogni modalità, chiamato "stack" (nota: nome errato). Queste pile iniziano vuote. Quando una cella si trova in una modalità particolare, i seguenti comandi influenzeranno lo stack che corrisponde a questa modalità, ad esempio in modalità float, le operazioni influenzeranno lo stack float. E, naturalmente, ci sono comandi per passare da una modalità all'altra. Le modalità sono importanti perché ogni operatore può essere sovraccaricato per ciascuna modalità e ciascun tipo di argomento.
Inoltre, ci sono due modalità aggiuntive (queste riguardano solo i comandi, non lo stack direttamente), la modalità normale e la modalità di inserimento. La modalità normale funziona normalmente, dove ci sono operatori che accettano argomenti e influiscono direttamente sullo stack. In modalità cursore, (quasi) ogni personaggio viene interpretato letteralmente come una stringa e successivamente viene anteposto / aggiunto di conseguenza alla pila. La modalità Caret viene avviata / terminata con punti di inserimento (append) o down-caret (anteponi).
La carota inizia in una cella sul giardino, in modalità stack-string e in modalità caret.
A partire dalla modalità punto di inserimento, la stringa <th>A
viene aggiunta alla stringa di stack inizialmente vuota. Quindi segue il *
comando che lo duplica $
, l'input, i tempi. Quindi <tr>
viene anteposto alla stringa di stack mediante l'uso del cursore inferiore v
. Questo crea la riga di intestazione della tabella.
Per creare le righe di dati, dupliciamo l'intestazione in un'altra cella. l
sposta l'IP nella cella vuota a destra e +
aggiunge (^h)
la stringa nella cella a sinistra (essenzialmente copiandola nella cella a destra). ()
avvia una subshell, un nuovo programma Carrot con quasi lo stesso nastro ed ^
esce dalla modalità punto di inserimento in modo da poter h
ottenere la stringa nella cella sinistra. Questo viene quindi *
duplicato da($^F- 1)
, il prossimo input meno 1, volte.
Sempre nella cella giusta, A
imposta l'array di questa cella sulla sua suddivisione in stack "h"
. S
unisce l'array dello stack "d"
e imposta la stringa dello stack su questo valore. A"h"S"d"
sostituisce davvero h
s con d
s per formare le righe di dati. Ora h
ci spostiamo sulla cella iniziale sinistra.
Ora aggiungiamo la stringa di stack della cella a destra a questa cella usando +(^l)
. Non resta che aggiungere il <table>
tag, quindi lo facciamo v
anteponendolo.