我正在尋找一些正則表達式/自動機的幫助。我僅限於+
或Kleene Star。通過代表三進制數字的字符串(如二進制數字,只有3)解析,我需要能夠知道結果是否小於4的倍數。三元數,正則表達式
因此,例如120 = 0*1+2*3+1*9 = 9+6 = 15 = 16-1 = 4(n)-1
。
即使是指向模式的指針也會非常有幫助!
我正在尋找一些正則表達式/自動機的幫助。我僅限於+
或Kleene Star。通過代表三進制數字的字符串(如二進制數字,只有3)解析,我需要能夠知道結果是否小於4的倍數。三元數,正則表達式
因此,例如120 = 0*1+2*3+1*9 = 9+6 = 15 = 16-1 = 4(n)-1
。
即使是指向模式的指針也會非常有幫助!
可以生成一系列的值做一些觀察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
...
注意,(十進制)每個數字的值比由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。
我在這裏的編碼比賽的答案:http://codegolf.stackexchange.com/questions/3503/hard-code-golf-regex-for-divisibility-by-7/3505#3505給你一個測試的例子可分性與不同的數字基礎。這將是一個很好的指針。 – Griffin 2012-04-06 01:03:16
謝謝。到目前爲止,我有一些規則,但沒有明確的規定。 – 2012-04-06 01:12:47
我的建議是生成一個FSM /正則表達式,它用4來測試四叉可分性。如果您從我的NFA修改規則,那麼這不應該太難。一旦你確定調整你的解決方案的「-1」位是微不足道的。 – Griffin 2012-04-06 01:16:53