展览会
在赢得SO抽奖后,您本可以跻身世界之巅,而且您已经做到了!抽奖活动已经进行了一年,现在,您是被选中进入SO堡垒的一百名程序员之一。最后,等待结束了。今天是您要去的日子-[混淆的文本继续]。
哎呀 对不起,不该告诉。
无论如何,您终于到达一个穿着黑色西装的刻有坚忍面孔的男人,上面刻有一个微小的SO标志。他对你皱眉。他说:“其他人已经在里面了。” “很快。”
你冲进去,有点害怕。到底发生了什么?SO怎么了?在内部,您观察到其他99位程序员正专心盯着他们的屏幕打字。您坐在剩下的座位上,并收到以下消息:
您好,程序员!看来我们遇到了问题;SO已经被渗透,我们不知道是谁。(就我个人而言,我怀疑它是Pyth或CJam程序员,但是,嘿。)但是,所有受到损害的是Markdown编辑器。好吧,实际上,这很多很多,但这就是您的用武之地。
我希望您创建一个程序(或函数,我们并不挑剔),该程序将解释降价文件并将其转换为新的“ SO Beautifier-Arity -Decomposer”(又称“ SOBAD”)格式。您必须以最短的字节数执行此操作-我们在低速运行,直到解决此黑客问题为止。感谢您的宝贵时间,祝您好运!
真诚的,
堆栈溢出的创造者
目标给定有效的markdown文件作为提交的输入,请对输入执行以下转换并输出:
(当我使用+符号时,我的意思是RegExp“一个或多个先前字符的实例”运算符,而不是文字加号。)
- 将所有1级标头(
# ...或...\n=+)转换为{ ... },...成为ALL CAPS。 - 将所有2级标头(
## ...或...\n-+)转换为{{ ... }},每个单词均大写 - 将所有3级标题(
### ...)转换为小写;也就是说,所有字母(不区分大小写)都以ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ各自的方式映射到。 - 将所有粗体实例(
**...**)转换为...,并...变为ALL CAPS。 - 将所有斜体实例(
_..._)转换为. . .,其中每对字符之间已插入一个空格。 - 将所有代码实例(
`...`)转换为< ... >。 - 将所有删除线实例(
---...---)转换为-.-.-.-,其中-在每对字符之间插入了a 。 - 变换所有编号列表实例(
N. {a}\nN. {b} ...其中N正则表达式匹配[0-9]+)至(1. {a}\n 2. {b}...) - 将所有无序列表实例(
* ...\n* ......)转换为(o ...\n o ......) 
更多细节
- 标头和列表实例只能在行的开头找到,但是它们可能被大量的空白包围。
 - 不会有链接的实例,例如,
*a_*a_不适用于我们的标准,也不会对类似的东西__a__,*_a_*或_*a*_出现在一个输入。 - 当且仅当
-or=紧接文本行时,多行标题才有效。 - 没有标题将包含其他降价实体。例如,
# `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将被`\`视为\,但我希望您将第二个`字符视为普通字符,然后匹配下一个`字符。 
                
                2
              
                  对于高尔夫问题,规格太弱了。
                
                
                  
                    —
                    feersum 
                    
                  
                
              
                  拒绝投票的人,谢谢您准确地告诉我我做错了什么。它确实可以帮助我使这个问题变得更好。
                
                
                  
                    —
                    Conor O'Brien 2015年
                    
                  
                
              
                  我认为在某些情况下,应用一种转换可能会更改是否应用另一种转换。例如,在您应用斜体转换之后,
                
                  
                    —
                    Rainbolt 
                    
                  
                
              ***word***变为* * w o r d * *,突然加粗转换不适用。目前尚不清楚该如何处理。
                
                  @CᴏɴᴏʀO'Bʀɪᴇɴ评论中提到了许多问题,这些问题都有争议。我认为拒绝投票的人故意忽略提供反馈。他们可能只是反对现有的反馈。
                
                
                  
                    —
                    Alex A. 
                    
                  
                
              
                  @AlexA。当两个否决都发生时,注释上不存在赞成,此后一段时间也没有。
                
                
                  
                    —
                    Conor O'Brien