Успешная подача кода в гольф по своей природе наполнена сумасшедшими символами повсюду. Чтобы облегчить понимание их представления, многие игроки в коде предпочитают включать объяснение своего кода. В их объяснении строка кода превращается в вертикально разнесенную диаграмму.
Например, если бы это был мой код:
1_'[3:~2@+]`
Одна из многих возможных диаграмм, которые я мог бы создать, выглядела бы так:
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
Цель
В этом задании вы напишете инструмент автоматического форматирования объяснений, который берет строку кода и создает диаграмму, к которой можно легко добавить пояснительный текст.
Для того, чтобы сделать это более задачу полезной , пользователь сможет указать содержимое каждой строки, предоставив строку форматирования. Строка форматирования будет второй строкой, содержащей только буквы A-Za-z
, такой же длины, что и программа. Буквы показывают порядок, в котором символы программы должны быть напечатаны в объяснении.
Вот пример ввода / вывода без форматирования в скобках :
123423
AabcBC
1
2
3
2
3
4
Скобки
Если более одного символа в программе имеет один и тот же уровень приоритета, то этот набор символов действует как отдельный блок кода (если они образуют группу) или набор скобок (если они содержат другие промежуточные символы). Общие правила просты:
Символы не появляются в строке диаграммы до тех пор, пока все другие символы более высокого приоритета уже не появятся в строках над ним на диаграмме.
Символы одинакового приоритета всегда печатаются на одних и тех же строках. Если в строке появляется определенный символ, все остальные символы с равным приоритетом появляются в строке.
Набор символов с одинаковым приоритетом продолжает появляться в каждой строке до тех пор, пока все остальные символы, заключенные в него, не появятся хотя бы один раз. Это учитывает "подобные скобкам" конструкции. Если
bceab
есть приоритеты, тоb
символы появятся во второй строке (они имеют наивысший приоритет) и будут отображаться до тех пор, пока не появятся всеcea
символы. Если строка приоритета имеет значениеabcadeafga
, то все изbcdefg
них считаются содержащимися в ней, все 4a
секунды будут появляться до техg
пор, пока не появится.
Больше требований к форматированию
Все строки вывода должны иметь одинаковую длину (длину входных строк), дополненные пробелами по мере необходимости. Строка входной программы может содержать пробелы, хотя этим пробелам также будет дана буква приоритета. Конечные переводы строк на выходе / вводе являются необязательными.
счет
Это код гольф, выигрывает наименьшее количество байтов.
Примеры
Вот закомментированный пример фрагмента кода с более сложным форматированием.
1_'[3:~2@+]`
abbcddeffgch
1 #highest priority is denoted by the lowercase letter a
_' #priority b
[ ] #all characters with priority c
[3: ] #priority d, but priority c still printed because it encloses more
[ ~ ] #priority e
[ 2@ ] #priority f
[ +] #priority g, last line of c because all enclosed characters have appeared
` #priority h
Пример в Perl:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
Вот несколько примеров в CJam, предоставленных Мартином Бюттнером:
l~2*{_2%{3*)}{2/}?_p_(}g;
aabbcdddefffeeggeehhiiccj
l~
2*
{ }g
{_2% }g
{ { }{ }? }g
{ {3*)}{ }? }g
{ { }{2/}? }g
{ _p }g
{ _(}g
;
q{_eu'[,66>"EIOU"-#)g{'o1$}*}/
abcccddddddeeeeeeefgghiijjhhbb
q
{ }/
{_eu }/
{ '[,66> }/
{ "EIOU"- }/
{ # }/
{ )g }/
{ { }*}/
{ {'o }*}/
{ { 1$}*}/
Вот безумный пример, чтобы просто с тобой связываться:
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
Вот более явный пример того, что происходит, когда скобки совпадают abab
. (Обычно это не тот способ, которым вы бы выбрали форматирование объяснения.)
aabbccddaaeebb
aabbccddaaeebb
aa aa
aabb aa bb
aabbcc aa bb
aabb ddaa bb
bb eebb #"aa" no longer appears because all of "bbccdd" have already appeared.
oNo
можно заменитьn
на TIO .