Вдале подання коду для гольфу за своєю природою повсюдно наповнене шаленими символами. Щоб зробити їх подання простішим для розуміння, багато гравців із кодом вирішили включити пояснення свого коду. У їхньому поясненні рядок коду перетворюється на вертикально підірвану діаграму.
Наприклад, якщо це мій код:
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 .