<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Mientras trabajaba en esto, descubrí un error con h
no funcionaba y lo solucioné)
Golfé algunos bytes acortando el html y usando "dividir, unir" en lugar de "reemplazar"
Pruébalo en línea! , use la opción de línea de comandos-d
para ver el AST (Nota: esto usa el nuevo intérprete de nodo, por lo que la versión anterior en el sitio web no puede ejecutar esto).
Este programa toma la entrada indexada en 0 y en orden inverso, debido a la naturaleza extraña de Carrot, 3 2
imprimiendo así una tabla de 3 × 4.
Ejecute el programa así, ./carrot -f prog.carrot input.txt
Básicamente crea la fila del encabezado, luego las filas de datos en otra celda del jardín (cinta 2D) y las concatena juntas.
La zanahoria funciona en una cinta 2D, llamada jardín. Cada celda en el jardín se compone de tres modos de pila, cadena, flotador, matriz. Hay un valor para cada modo, llamado "pila" (nota: nombre incorrecto). Estas pilas comienzan vacías. Cuando una celda está en un modo particular, los siguientes comandos afectarán a la pila que corresponde a este modo, por ejemplo, en modo flotante, las operaciones afectarán a la pila flotante. Y, por supuesto, hay comandos para cambiar entre modos. Los modos son importantes porque cada operador puede sobrecargarse para cada modo y cada tipo de argumento.
Además, hay dos modos adicionales (estos solo afectan a los comandos, no a la pila directamente), el modo normal y el modo de detención. El modo normal funciona normalmente, donde hay operadores que toman argumentos y afectan directamente a la pila. En el modo de intercalación, (casi) cada carácter se interpreta literalmente como una cadena, y luego se antepone / agrega en consecuencia a la pila. El modo Caret se inicia / finaliza con carets (agregar) o down-carets (anteponer).
La zanahoria comienza en una celda en el jardín, en modo de cadena de apilamiento y en modo de cuidado.
Comenzando en modo caret, la cadena <th>A
se agrega a la cadena de pila inicialmente vacía. Luego sigue el *
comando que lo duplica $
, la entrada, los tiempos. Luego <tr>
se antepone a la cadena de la pila mediante el uso de down-caret v
. Esto crea la fila de encabezado de la tabla.
Para crear las filas de datos, duplicamos el encabezado a otra celda. l
mueve la IP a la celda vacía derecha y +
agrega (^h)
la cadena en la celda a la izquierda (esencialmente copiándola a la celda a la derecha). ()
inicia una subshell, un nuevo programa Carrot con casi la misma cinta, y ^
sale del modo intercalado para que podamos h
obtener la cadena en la celda izquierda. Esto se *
duplica por ($^F- 1)
, la siguiente entrada menos 1, veces.
Aún en la celda derecha, A
establece la matriz de esta celda en su apilamiento dividido por "h"
. S
une la matriz de la pila "d"
y establece la cadena de la pila en este valor. A"h"S"d"
Realmente reemplaza h
s con d
s para formar las filas de datos. Ahora h
nos movemos a la celda inicial izquierda.
Ahora agregamos la cadena de pila de la celda a la derecha de esta celda usando +(^l)
. Todo lo que queda es agregar la <table>
etiqueta, por lo que lo hacemos v
anteponiéndola.