Carotte , 77 51 octets
<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(En travaillant là-dessus, j'ai découvert un bogue qui h
ne fonctionnait pas et je l'ai corrigé)
Golfé quelques octets en raccourcissant le code HTML ainsi qu'en utilisant "scinder, joindre" au lieu de "remplacer"
Essayez-le en ligne! , utilisez l'option de ligne de commande-d
pour voir l'AST (Remarque: ceci utilise le nouvel interpréteur de noeud, donc l'ancienne version sur le site Web ne peut pas l'exécuter.)
Ce programme prend l'entrée indexée 0 et dans l'ordre inverse, en raison de la nature étrange de Carrot, 3 2
imprimant ainsi un tableau 3 × 4.
Exécutez le programme comme ça, ./carrot -f prog.carrot input.txt
Fondamentalement, crée la ligne d'en-tête, puis les lignes de données sur une autre cellule du jardin (bande 2D), et les concatène ensemble.
Carrot travaille sur une bande 2D, appelée jardin. Chaque cellule du jardin est composée de trois modes de pile, chaîne, flottant, tableau. Il existe une valeur pour chaque mode, appelée "pile" (remarque: impropre). Ces piles commencent vides. Lorsqu'une cellule est dans un mode particulier, les commandes suivantes affecteront la pile qui correspond à ce mode, par exemple en mode flottant, les opérations affecteront le flotteur de pile. Et bien sûr, il existe des commandes pour basculer entre les modes. Les modes sont importants car chaque opérateur peut être surchargé pour chaque mode et chaque type d'argument.
De plus, il existe deux modes supplémentaires (ceux-ci n'affectent que les commandes, pas directement la pile), le mode normal et le mode caret. Le mode normal fonctionne normalement, où des opérateurs acceptent des arguments et affectent directement la pile. En mode accent circonflexe, (presque) chaque caractère est interprété littéralement comme une chaîne et est ensuite ajouté / ajouté en conséquence à la pile. Le mode insertion est démarré / terminé avec des accents (ajout) ou vers le bas (ajout).
La carotte commence dans une cellule du jardin, en mode pile-chaîne et en mode caret.
À partir du mode caret, la chaîne <th>A
est ajoutée à la chaîne de pile initialement vide. Suit ensuite la *
commande qui le duplique $
, l'entrée, les temps. Puis <tr>
est ajouté à la chaîne de pile par l'utilisation du curseur bas v
. Cela crée la ligne d'en-tête de la table.
Pour créer les lignes de données, nous dupliquons l'en-tête dans une autre cellule. l
déplace l'IP vers la cellule vide de droite et +
ajoute (^h)
la chaîne dans la cellule à gauche (en la copiant essentiellement dans la cellule de droite). ()
démarre un sous-shell, un nouveau programme Carrot avec presque la même bande, et ^
quitte le mode caret afin que nous puissions h
obtenir la chaîne dans la cellule de gauche. Il est ensuite *
dupliqué par ($^F- 1)
, la prochaine entrée moins 1 fois.
Toujours dans la cellule de droite, A
définit le tableau de cette cellule sur son empilement divisé par "h"
. S
rejoint le tableau de pile par "d"
et définit la chaîne de pile à cette valeur. A"h"S"d"
remplace vraiment h
s par d
s pour former les lignes de données. Passons maintenant h
à la cellule de départ de gauche.
Maintenant, nous ajoutons la chaîne de pile de la cellule à droite de cette cellule en utilisant +(^l)
. Il ne reste plus qu'à ajouter la <table>
balise, nous le faisons donc en la v
ajoutant au préalable.