Морква , 77 51 байт
<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Працюючи над цим, я виявив помилку, що h
не працює, і виправив її)
Отримавши кілька байтів, скорочуючи html, а також використовуючи "розділити, приєднатися" замість "замінити"
Спробуйте в Інтернеті!, скористайтеся параметром командного рядка-d
щоб переглянути AST (Примітка: для цього використовується новий інтерпретатор вузла, тому старіша версія веб-сайту не може це запустити.)
Таким чином, ця програма приймає 0-індексований вхід і в зворотному порядку через дивну природу Моррока 3 2
друкуючи 3 × 4 таблиці.
Запускайте програму так, ./carrot -f prog.carrot input.txt
В основному створюється рядок заголовка, потім дані рядки на іншій комірці саду (2D стрічка) і об'єднують їх разом.
Морква працює на 2D стрічці, яку називають садовою. Кожна комірка в саду складається з трьох режимів стека, string, float, масив. Для кожного режиму є значення, яке називається "стек" (примітка: неправильне значення). Ці стеки починаються порожніми. Коли комірка знаходиться в певному режимі, наступні команди впливатимуть на стек, який відповідає цьому режиму, наприклад, у плаваючому режимі, операції впливатимуть на поплавок стека. І звичайно, є команди для перемикання між режимами. Режими важливі, оскільки кожен оператор може бути перевантажений для кожного режиму та кожного типу аргументів.
Крім того, є два додаткові режими (вони впливають лише на команди, а не на стек безпосередньо), звичайний режим і режим каретки. Нормальний режим працює нормально, де є оператори, які беруть аргументи і безпосередньо впливають на стек. У режимі карети (майже) кожен символ трактується буквально як рядок, а згодом попередньо додається / додається відповідно до стеку. Режим каретки запускається / закінчується доглядом (додавати) або знизу (попередньо).
Морква починається в осередку на саду, в режимі стека-рядка та в режимі каретки.
Починаючи в режимі каретки, рядок <th>A
додається до спочатку порожнього стека. Потім слід *
команда, що дублює його $
, введення, рази. Потім <tr>
додається до стека-рядка за допомогою нижньої карети v
. Це створює рядок заголовка таблиці.
Для створення рядків даних ми копіюємо заголовок до іншої комірки. l
переміщує IP в праву порожню клітинку і +
додає (^h)
рядок у комірці зліва (по суті, копіюючи її в комірку праворуч). ()
запускає підзарядку, нову програму «Морква» майже з тією ж стрічкою та ^
виходить із режиму каретки, щоб ми могли h
отримати рядок у лівій комірці. Потім це *
дублюється ($^F- 1)
наступним входом мінус 1 рази.
Ще в правій комірці A
встановлює масив цієї комірки на її складання, розділене на "h"
. S
приєднується до масиву стека by "d"
і встановлює рядок стека до цього значення. A"h"S"d"
насправді просто замінює h
s на d
s для формування рядків даних. Теперh
переходимо до лівої вихідної комірки.
Тепер ми додаємо рядок стека комірки праворуч до цієї комірки, використовуючи +(^l)
. Залишилося лише додати <table>
тег, тому ми робимо це, попередньо v
додавши його.