экспозиция
После выигрыша ТАКОЙ лотереи вы могли бы быть на вершине мира, и вы были! Розыгрыш длился уже год, и вы были одним из ста программистов, которые были выбраны для вступления в SO оплот. И наконец, ожидание окончено. Сегодня день, когда вы идете - [обфусцированный текст продолжается].
Упс. Извините, не должен рассказывать.
Как бы то ни было, вы, наконец, прибыли, чтобы встретить человека с черным лицом в черном костюме с крошечной SO-эмблемой на нем. Он хмурится на тебя. «Остальные уже внутри», - сказал он, отметив, что вас опознали у ворот. "Быстро."
Ты врываешься внутрь, немного напуган. Что на земле произошло? Что было не так в SO? Внутри вы видите, как остальные 99 программистов пристально смотрят на свои экраны, печатая. Вы занимаете оставшееся место и получаете следующее сообщение:
Привет, программист! Кажется, что мы столкнулись с проблемой; Так проник, кем мы не знаем. (Лично я подозреваю, что это был программист Pyth или CJam, но эй.) Однако, все, что пострадало, это редактор Markdown. Ну, на самом деле, это довольно много, но это то, где вы входите.
Я хочу, чтобы вы создали программу (или функцию, мы не требовательны), которая будет интерпретировать файл уценки и преобразовать его в наш новый "SO Beautifier-Arity" -Decomposer "(он же" SOBAD ") формат. Вы должны сделать это в кратчайшем количестве байтов - мы работаем на пониженном уровне, пока не решим эту проблему взлома. Спасибо за ваше время и удачи!
С уважением,
Создатель переполнения стека
Задача При наличии действительного файла уценки в качестве входных данных для вашего представления выполните и выведите на вход следующие преобразования:
(Когда я использую +
символ, я имею в виду RegExp «один или несколько экземпляров предыдущего символа», а не буквальный знак плюс.)
- Преобразуйте все заголовки уровня 1 (
# ...
или...\n=+
) в{ ... }
,...
став ВСЕМ ЗАГЛУШКАМИ. - Преобразовать все заголовки уровня 2 (
## ...
или...\n-+
) в{{ ... }}
каждое слово с заглавной буквы - Преобразуйте все заголовки уровня 3 (
### ...
) в маленькие заглавные буквы; то есть все буквы (без учета регистра) отображаютсяᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ
соответствующим образом. - Преобразуйте все полужирные экземпляры (
**...**
) в...
,...
став ВСЕМ КАПСОМ - Преобразуйте все экземпляры курсив (
_..._
) в. . .
, где пробел был вставлен между каждой парой символов. - Преобразуйте все экземпляры кода (
`...`
) в< ... >
. - Преобразуйте все зачеркнутые экземпляры (
---...---
) туда-.-.-.-
, где-
между каждой парой символов был вставлен символ a . - Преобразуйте все экземпляры нумерованного списка (
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-сайтах отличается от того, что я предлагаю (и более сложна), поэтому не делайте этого! SO будет восприниматься`\`
как\
, но я бы хотел, чтобы вы относились ко второму`
как к обычному символу и вместо этого соответствовали следующему`
.
***word***
становится* * w o r d * *
после того, как вы примените преобразование курсивом, и внезапно жирное преобразование не применяется. Непонятно, как с этим справиться.Ответы:
Python 3 ,
652640 байтПопробуйте онлайн!
источник