这是double +标头!


13

有关

展览会

在赢得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应保持不变。

输入法

输入必须是以下之一:

  1. 数组/元组/列表/等 的字符串。
  2. 或包含换行符的字符串以分隔行。

如果您的语言不支持,请使用与上述数据类型最接近的语言。(例如,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 --

奖金

  1. 如果支持字符转义,则为-19个字节(以便将其视为“普通”字符);您可以选择任何转义字符,但我建议\还是^。请注意,SO网站上的转义系统与我建议的有所不同(并且更加复杂),所以请不要这样做!SO将被`\`视为\,但我希望您将第二个`字符视为普通字符,然后匹配下一个 `字符。

2
对于高尔夫问题,规格太弱了。
feersum

4
拒绝投票的人,谢谢您准确地告诉我我做错了什么。它确实可以帮助我使这个问题变得更好。
Conor O'Brien 2015年

4
我认为在某些情况下,应用一种转换可能会更改是否应用另一种转换。例如,在您应用斜体转换之后,***word***变为* * w o r d * *,突然加粗转换不适用。目前尚不清楚该如何处理。
Rainbolt

1
@CᴏɴᴏʀO'Bʀɪᴇɴ评论中提到了许多问题,这些问题都有争议。我认为拒绝投票的人故意忽略提供反馈。他们可能只是反对现有的反馈。
Alex A.

1
@AlexA。当两个否决都发生时,注释上不存在赞成,此后一段时间也没有。
Conor O'Brien

Answers:


1

Python 3中652个 640字节

import re
def N(o):c,t,_=o.groups();x=' -'[c<'_'];return['< %s >'%t,t.upper()][c<'`']if c in'**`'else x+x.join(t)+x
def f(s):
 S=[];i=0
 while s:
  l=s.pop(0);n=set(*s[:1])
  if n<={*'=-'}and n:s=s[1:];l='#'*('-'in n)+'# '+l
  if'# '==l[:2]:l='{%s}'%l[2:].upper()
  if'## '==l[:3]:l='{{%s}}'%l[3:].title()
  if'### '==l[:4]:l=''.join('ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ'[ord(c)-65]if'@'<c<'['else c for c in l[4:].upper())
  l=re.sub(('(\*\*|_|---|`)(.*?)'*2)[:-5],N,re.sub(r'^\s*[*] (.*)',r' o \1',l))
  if re.match(r'\s*\d+\. ',l):i+=1;l=re.sub(r'\s*\d+\.(.*)',' %d.'%i+r'\1',l)
  else:i=0
  S+=[l]
 return S

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.