<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"
на самом деле просто заменяет h
s на d
s, чтобы сформировать строки данных. Теперь h
переместимся в левую стартовую ячейку.
Теперь мы добавляем строку стека ячейки справа к этой ячейке, используя +(^l)
. Осталось только добавить <table>
тег, поэтому мы делаем это, v
добавляя его.