仕事
単純な正規表現を、次のみで構成される空でない正規表現として定義します
- 文字
0
と1
、 - 括弧をグループ化
(
して)
、 - 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
01100110
は、興味深いケースです...ナイーブアルゴリズムが書き込む01+0+1+0
か(0+1+)+0
、最適ではありません。