任务
将简单的正则表达式定义为仅包含以下内容的非空正则表达式
- 字符
0
和1
, - 分组括号
(
和)
, - 一个或多个重复量词
+
。
给定0
s和1
s 的非空字符串,您的程序应找到与完整输入字符串匹配的最短简单正则表达式。(也就是说,当匹配一个简单的正则表达式时,假装它由^
和 预定$
。)如果有多个最短的正则表达式,请打印其中的一个或全部。
code-golf,所以最短的提交(以字节为单位)获胜。
测试用例
1 -> 1
00 -> 00 or 0+
010 -> 010
1110 -> 1+0
01010 -> 01010
0101010 -> 0(10)+ or (01)+0
011111 -> 01+
10110110 -> (1+0)+
01100110 -> (0110)+ or (01+0)+
010010010 -> (010)+
111100111 -> 1+001+ or 1+0+1+
00000101010 -> 0+(10)+ or (0+1)+0
1010110001 -> 1(0+1+)+ or (1+0+)+1
3
您应该阐明,您要我们编写一个编写正则表达式的程序,而不是自己编写正则表达式。但这看起来很有趣。
—
gcampbell '16
在我的测试中,这
—
尼尔
01100110
是一个有趣的案例...天真的算法会写出01+0+1+0
或者(0+1+)+0
不是最佳算法。