Експозиція
Вигравши розіграш SO, ви могли бути на вершині світу, і ви були! Розіграш тривав уже рік, і ви були одним із сотень програмістів, які були обрані для участі у твердині ОВ. І нарешті, очікування закінчено. Сьогодні день, в який ви йдете - [затуманений текст продовжується].
Уопс. Вибачте, не повинен розповідати.
У всякому разі, ви нарешті приїхали зустріти стоїчного чоловіка в чорному костюмі з крихітною емблемою SO на ньому. Він нахмуриться на тебе. "Інші вже знаходяться всередині", - сказав він, зазначивши, що вас отопізнали біля воріт. "Швидко".
Ти кинешся всередину, тад злякався. Що на землі пішло? Що було не так у SO? Всередині ви спостерігаєте, як інші 99 програмістів пильно дивляться на свої екрани, набираючи текст. Ви займаєте місце, що залишилося, і вас вітає таке повідомлення:
Привіт, програміст! Здається, ми зіткнулися з проблемою; Так проникли, ким ми не знаємо. (Особисто я підозрюю, що це був програміст Pyth або CJam, але ей.) Однак, все, що було завдано шкоди, - це редактор Markdown. Ну, насправді, це досить багато, але саме там ви заходите.
Я хочу, щоб ви створили програму (або функцію, ми не вибагливі), яка буде інтерпретувати файл розмітки та перетворювати його в наш новий "SO Beautifier-Arity -Декомпозитор "(також" SOBAD ") формат. Ви повинні зробити це в найкоротшій кількості байтів - ми працюємо на низькому рівні, поки не вирішимо цю проблему злому. Дякуємо за ваш час, і найкраща удача!
З повагою,
The Maker of Stack Overflow
Мета Дано дійсний файл розмітки як вхід для подання, виконайте та виведіть наступні перетворення на вході:
(Коли я використовую +символ, я маю на увазі оператор RegExp "один або кілька екземплярів попереднього символу", а не буквальний знак плюс.)
- Перетворіть усі заголовки рівня 1 (
# ...або...\n=+) на{ ... },...перетворившись на ВСІ КАПС. - Перетворіть усі заголовки рівня 2 (
## ...або...\n-+) на{{ ... }}кожне слово з великої літери - Перетворіть усі заголовки рівня 3 (
### ...) у маленькі кришки; тобто всі літери (нечутливі до регістру) відображаютьсяᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢу відповідний спосіб. - Перетворіть усі сміливі екземпляри (
**...**)...,...перетворившись на ВСІ КАПС. - Перетворіть усі курсивні екземпляри (
_..._) в. . ., де між кожною парою символів було вставлено пробіл. - Перетворіть усі екземпляри коду (
`...`) в< ... >. - Перетворіть усі прокреслені екземпляри (
---...---) в-.-.-.-, де а-вставлено між кожною парою символів. - Перетворіть усі пронумеровані екземпляри списку (
N. {a}\nN. {b} ...деNвідповідає регулярному вираженню[0-9]+) в (1. {a}\n 2. {b}...) - Перетворіть усі не упорядковані екземпляри списку (
* ...\n* ......) в (o ...\n o ......)
Детальніше
- Екземпляри заголовків і списків можна знайти лише на початку рядків, однак вони можуть бути оточені великою кількістю пробілів.
- Там буде не пов'язані екземпляри, наприклад,
*a_*a_не є допустимим для наших стандартів, і не буде нічого подібного__a__,*_a_*або_*a*_з'являються у вході. - Багаторядковий заголовок дійсний лише тоді, коли
-або=s безпосередньо слідує за рядком тексту. - Жоден заголовок не міститиме інших об'єктів розмітки. Напр.,
# `code` snippetНе є коректною інформацією для наших цілей - Вам не доведеться обліковувати заголовки рівня 4+
- Вам не потрібно зберігати зайві пробіли (тобто
> 1пробіли) у файлі, тому це нормально, але це потрібно**hello there**робити,**hello there**але ні**hellothere**. Аналогічно, відстані та провідні простори, знайдені на лінії, не повинні зберігатися - У вхідних даних не знайдеться таблиць.
- НЕ БУДУТЬСЯ НЕ МАЄТЬСЯ РОЗПОЛУЧЕННЯ. Наприклад,
***...***ніколи не відбудеться. - Пробіл завжди буде слідувати не упорядкованій точці кулі (наприклад,
* ...не*...) - Елементи списку в упорядкованих та не упорядкованих списках завжди будуть складатися з одного рядка.
- Незрівнянні пари символів слід ігнорувати. Наприклад,
** coolі`java::defповинен залишатися колишнім.
Методи введення
Вхід повинен бути одним із наступних:
- Масив / кортеж / список / тощо. струн.
- АБО рядок, що містить нові рядки для окремих рядків.
Використовуйте найближчий еквівалент вашої мови вищезгаданим типам даних, якщо ваша мова не підтримує їх. (Наприклад, TI-BASIC не підтримує (1.)… не те, що TI-BASIC може змагатися, як би там не було: P).
Тестові справи
A }означає вхід, а наступний рядок означає вихід. Множинні }s означають розділені рядками тексту за допомогою рядків.
} Hello!
Hello!
} That _2 + 2 = 5_ challenge sure was **intense!**
That 2 + 2 = 5 challenge sure was INTENSE!
// note that there are spaces also padding it
} It's `s/a/e/g` **not** `sudo g/a/e/s`, stupid.
It's < s/a/e/g > NOT < sudo g/a/e/s >
} **WHAT!** He did _WHAT?!_
WHAT! He did W H A T ? !
} _WHAT_ is undefined, here!
W H A T is undefined, here!
} OI)(EJDSFIJK L:JP #@*REF&WDS F*(D+S +&(SDFWEF )DSF _DSF_F #R#
OI)(EJDSFIJK L:JP #@*REF&WDS F*(D+S +&(SDFWEF )DSF D S F F #R#
} # So, you wanna be a programmer, eh?
} ## Step 1: learn recursion
} ### Learning recursion requires learning recursion
} **Programming** is a futile task. _Leave w h i l e you still can!_
{SO YOU WANNA BE A PROGRAMMER, EH?}
{{Step 1: Learn Recursion}}
ʟᴇᴀʀɴɪɴɢ ʀᴇᴄᴜʀsɪᴏɴ ʀᴇǫᴜɪʀᴇs ʟᴇᴀʀɴɪɴɢ ʀᴇᴄᴜʀsɪᴏɴ
PROGRAMMING is a futile task. L e a v e w h i l e y o u s t i l l c a n ! // trailing space not required
} Haha, you're a _Java_ golfer? You'd be better of with brainf***.
Haha, you're a J a v a golfer? You'd be better of with brainf***. // less than four asterisks, do nothing
} # Reasons why NOT to use C--:
} 1. It doesn't exist.
} 2. I don't care.
{REASONS WHY NOT TO USE C--:}
1. It doesn't exist.
2. I don't care.
} 1. This is a test!
} 1. <-- And this actually works in Markdown.
1. This is a test!
2. <-- And this actually works in Markdown. // less than three -s, ignore
} * no.
} * NOOO.
} * fine.
o no.
o NOOO.
o fine.
} Python, ---34--- 3 bytes.
Python, -3-4- 3 bytes.
} ---Long line of crossed text.---
-L-o-n-g- -l-i-n-e- -o-f- -c-r-o-s-s-e-d- -t-e-x-t-.-
} ** cool!
** cool! // is not a bullet point, because a space doesn't follow the *; Isn't bold, because there is no matching **
-- end of test cases --
Бонус
- -19 байт, якщо ви підтримуєте втечу символів (щоб вони трактувалися як "нормальні"); Ви можете обрати будь-який символ втечі, але я б запропонував
\або^. Зауважте, що система виходу на сайти SO відрізняється від запропонованої мною (і складнішою), тому не робіть цього! Так би трактувати`\`як\, але я хотів би, щоб ви ставились до другого`як до цього звичайного символу, а натомість відповідали наступному`символу.
***word***стає * * w o r d * *після того, як ви застосуєте курсивне перетворення, і раптом жирне перетворення не застосовується. Незрозуміло, як з цим впоратися.