修复Meeesesessessesseesseesseesseseded upp teeexexextext


38

这是受星期一迷你高尔夫#6:Meeesesessess upp teeexexextext启发的

背景

ETHproductions很难在他通常的网页上输入文本。每当他使用数字或字母时,文本都会被注释掉。您的任务是帮助他键入内容,从而实现正常的行为。

转变

转换影响[0-9A-Za-z]由任何非字母数字字符分隔的字母数字()字符的运行。在下面的示例中,第一行将转换为第二行(其他行显示了转换的细分)

An12num:
Annn1n12n12nn12nn12nun12nun12numn12num
A
 nn
   n1
     n12
        n12nn12n
                n12nun12nu
                          n12numn12num

特别是,运行中第一个字符之后的任何字母数字字符都将转换为到目前为止的整个运行,除了第一个字符。此外,如果字符是字母(而不是数字),则该字符将变成两次运行。

值得庆幸的是,退格键将删除最后一个字符,并重置运行的开始。

任务

这次您的任务是不执行转换。相反,给定输入字符串,您必须返回编码后的文本,如果转换后将导致输入。输出必须尽可能短,\<char>以单个字符计。

文本编码如下:

\                   -> \\
backspace character -> \b
linefeed            -> \n

您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。

测试用例

每个测试用例都是两行,第一行是输入,第二行是输出。

Heeeeeelp me. It shouldn't be messed up.
Hee \blp\b me\b. It\b sh\bou\bld\bn't be\b me\bss\bed\b up\b.

alert("Hello, world!");
al\ber\bt("He\bll\bo, wo\brl\bd!");

1223234234523456
123456

6
它的定义很明确,但是为什么没有答案呢?
2015年

1
我莫名其妙地错过了这个。很好的分拆!也许以后我会尝试写一个答案。
ETHproductions 2015年

这让我想起了我的一个朋友通过UDP发送文本的时间
TRGWII

1
我认为您的最终测试用例需要修复。您1在运行中(每次)都包含第一个字符。
Leif Willerts 2015年

老实说,我不明白我该怎么办...对不起。您可以添加一些输入和输出,并在解释中添加一些示例吗?抱歉。
Yassin Hajaj 2015年

Answers:


10

果酱(207)

{_,1>{:E1<_0{:I2$,+E=:C+:R1>C'9>)*+:P,E,<{EP#{L0}{PRI)1}?}{PE#L{R8cP,E,-*+}?0}?}g}&}:U;LqS+'a+{_'[,_el^A,s+&,V={+}{s\V!:V{L{:BU_aL?B,,1>Bf{_2$<U_{_W=8>S8c+*+\@>j+}{?;}?}+{,}$0=}j}|\}?}%s'\8cN++'\"\bn"f+er-2<

在线尝试

说明:

几乎忘了写这个:p

该问题可通过以下几个步骤解决:

  • 文本分为字母数字字符(称为单词)行和非字母数字字符(非单词)行
  • 非单词按原样打印,单词固定
  • 固定单词是递归完成的(带有备注):以各种可能的方式将单词分为2个块​​(包括空的第二个块),尝试取消第一个块的迷惑(请参见下文),修复第二个块并将结果加一个空格-退格(如果需要);采取最短的子解决方案
  • 不分块意味着找到一个最小的字母数字字符串,后面可能跟一些退格键(但中间没有退格键),当它们弄乱时,会产生给定的分块;它是通过一个简单的贪心算法完成的,从左到右,并行构建未弄乱的字符串及其混乱版本,并在每个步骤中确定下一个需要的字符;一些大块不能乱扔

1
天哪,这是CJam计划的重头戏!辛苦了
ETHproductions 2016年
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.