<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Работая над этим, я обнаружил ошибку с hнеработающим и исправил ее)
Гольф несколько байтов, сокращая html, а также используя «split, join» вместо «replace»
Попробуйте онлайн! , используйте параметр командной строки-d чтобы увидеть AST (Примечание: здесь используется новый интерпретатор узлов, поэтому более старая версия на веб-сайте не может его запустить.)
Эта программа принимает входные данные с 0 индексами и в обратном порядке, из-за странной природы Моркови, таким образом 3 2 печатая таблицу 3 × 4.
Запустите программу так, ./carrot -f prog.carrot input.txt
В основном создает строку заголовка, затем строки данных в другой ячейке сада (2D-лента) и объединяет их вместе.
Морковь работает на двухмерной ленте, которая называется сад. Каждая клетка в саду состоит из трех стековых режимов: string, float, array. Для каждого режима есть значение, называемое «стеком» (примечание: неправильное обозначение). Эти стеки начинаются пустыми. Когда ячейка находится в определенном режиме, следующие команды будут влиять на стек, соответствующий этому режиму, например, в режиме с плавающей запятой, операции будут влиять на смещение стека. И конечно, есть команды для переключения между режимами. Режимы важны, потому что каждый оператор может быть перегружен для каждого режима и каждого типа аргумента.
Кроме того, есть два дополнительных режима (они влияют только на команды, а не непосредственно на стек), обычный режим и режим каретки. Нормальный режим работает нормально, где есть операторы, принимающие аргументы и напрямую влияющие на стек. В режиме каретки (почти) каждый символ интерпретируется буквально как строка, а затем добавляется / добавляется в соответствии со стеком. Режим каретки запускается / заканчивается каретками (добавление) или нижними каретками (предварительно).
Морковь начинается в клетке в саду, в режиме стековой строки и в режиме каретки.
Начиная с режима каретки, строка <th>Aдобавляется в изначально пустую строку стека. Затем следует *команда, которая дублирует его $, ввод, время. Затем <tr>добавляется к строке стека с помощью нижнего кареткиv . Это создает строку заголовка таблицы.
Чтобы создать строки данных, мы дублируем заголовок в другую ячейку. lперемещает IP в правую пустую ячейку и +добавляет (^h)строку в ячейку слева (по сути, копируя ее в ячейку справа). ()запускает подоболочку, новую программу Carrot с почти той же лентой, и ^выходит из режима каретки, чтобы мы могли hполучить строку в левой ячейке. Это затем *дублируется($^F- 1) следующим вводом минус 1 раз.
Находясь в правой ячейке, Aустанавливает для массива этой ячейки его разбивку по стеку "h". Sприсоединяет массив стека с помощью "d"и устанавливает строку стека в это значение. A"h"S"d"на самом деле просто заменяет hs на ds, чтобы сформировать строки данных. Теперь hпереместимся в левую стартовую ячейку.
Теперь мы добавляем строку стека ячейки справа к этой ячейке, используя +(^l). Осталось только добавить <table>тег, поэтому мы делаем это, vдобавляя его.