展览会
在赢得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