<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Enquanto trabalhava nisso, descobri um bug que h
não funcionava e o corrigi)
Golpeou alguns bytes encurtando o html e usando "split, join" em vez de "replace"
Experimente online! , use a opção de linha de comando -d
para ver o AST (Observação: isso usa o novo interpretador de nó, portanto, a versão mais antiga no site não pode executar isso.)
Este programa pega a entrada indexada em 0 e em ordem inversa, devido à natureza estranha de Cenoura, 3 2
imprimindo assim uma tabela 3 × 4.
Execute o programa assim, ./carrot -f prog.carrot input.txt
Cria basicamente a linha do cabeçalho, depois as linhas de dados em outra célula do jardim (fita 2D) e as concatena.
Cenoura trabalha em uma fita 2D, chamada de jardim. Cada célula do jardim é composta de três modos de pilha, string, float, array. Há um valor para cada modo, chamado de "pilha" (nota: nome impróprio). Essas pilhas começam vazias. Quando uma célula está em um modo específico, os seguintes comandos afetam a pilha que corresponde a esse modo, por exemplo, no modo de flutuação, as operações afetam a flutuação da pilha. E, claro, existem comandos para alternar entre os modos. Os modos são importantes porque cada operador pode ser sobrecarregado para cada modo e cada tipo de argumento.
Além disso, existem dois modos adicionais (eles afetam apenas os comandos, não a pilha diretamente), modo normal e modo de interpolação. O modo normal funciona normalmente, onde há operadores recebendo argumentos e afetando diretamente a pilha. No modo de sinal de intercalação, (quase) todo caractere é interpretado literalmente como uma sequência e, posteriormente, é anexado / anexado de acordo com a pilha. O modo de intercalação é iniciado / finalizado com intercalação (anexar) ou intercalar (intercalar).
A cenoura começa em uma célula no jardim, no modo de pilha e no modo de sinal de intercalação.
Começando no modo de sinal de intercalação, a string <th>A
é adicionada à string de pilha inicialmente vazia. Em seguida, segue o *
comando que duplica $
, a entrada, os tempos. Em seguida, <tr>
é anexado à string da pilha pelo uso do sinal de intercalação v
. Isso cria a linha do cabeçalho da tabela.
Para criar as linhas de dados, duplicamos o cabeçalho para outra célula. l
move o IP para a célula vazia direita e +
anexa (^h)
a sequência na célula à esquerda (essencialmente copiando-a para a célula à direita). ()
inicia um subshell, um novo programa Carrot com quase a mesma fita e ^
sai do modo de sinal de intercalação para que possamos h
obter a string na célula esquerda. Isso é *
duplicado pela ($^F- 1)
próxima entrada menos 1, vezes.
Ainda na célula certa, A
define a matriz dessa célula para seu empilhamento dividido por "h"
. S
junta-se à matriz da pilha "d"
e define a cadeia de caracteres da pilha para esse valor. A"h"S"d"
realmente substitui h
s por d
s para formar as linhas de dados. Agora h
vamos para a célula inicial esquerda.
Agora, anexamos a string de pilha da célula à direita dessa célula usando +(^l)
. Tudo o que resta é adicionar a <table>
tag, então fazemos isso v
anexando-a.