2012-04-06 28 views
0

我正在尋找一些正則表達式/自動機的幫助。我僅限於+或Kleene Star。通過代表三進制數字的字符串(如二進制數字,只有3)解析,我需要能夠知道結果是否小於4的倍數。三元數,正則表達式

因此,例如120 = 0*1+2*3+1*9 = 9+6 = 15 = 16-1 = 4(n)-1

即使是指向模式的指針也會非常有幫助!

+3

我在這裏的編碼比賽的答案:http://codegolf.stackexchange.com/questions/3503/hard-code-golf-regex-for-divisibility-by-7/3505#3505給你一個測試的例子可分性與不同的數字基礎。這將是一個很好的指針。 – Griffin 2012-04-06 01:03:16

+0

謝謝。到目前爲止,我有一些規則,但沒有明確的規定。 – 2012-04-06 01:12:47

+1

我的建議是生成一個FSM /正則表達式,它用4來測試四叉可分性。如果您從我的NFA修改規則,那麼這不應該太難。一旦你確定調整你的解決方案的「-1」位是微不足道的。 – Griffin 2012-04-06 01:16:53

回答

0

可以生成一系列的值做一些觀察BC在bash:

for n in {1..40}; do v=$((4*n-1)); echo -en $v"\t"; echo "ibase=10;obase=3;$v" | bc ; done 

3 10 
7 21 
11 102 
15 120 
19 201 
23 212 
27 1000 
31 1011 
... 
0

注意,(十進制)每個數字的值比由4東西整除1更多或1以下任一交替, 。因此,1(lsb)數字大於0,3(2nd)數字小於4,9(3rd)數字大於8,27(4th)數字小於28等。
如果總結所有偶數位數和所有奇數位數,然後給奇數位數加1(如果從1開始計數),您應該得到相等性。

在你的例子中:odd:(0 + 1)+1,even:(2)。所以他們是平等的,所以這個數字的形式是4n-1。