Answers:
编辑:使用递归(NestWhile
)进行完全重写。快得多,而且没有浪费精力。
码
g@n_:=StringTake[NestWhile[#~StringReplace~{"A"-> "ABCBACBCABCBA","B"-> "BCACBACABCACB",
"C"->"CABACBABCABAC"}&,"ABC",StringLength[#]<n&],n]
用法
生成具有一百万个字符的三元方自由字大约需要1/40秒。
g[10]
g[53]
g[506]
AbsoluteTiming[g[10^6];]
验证中
f
将测试字符串是否为无正方形。
f[s_]:=StringFreeQ[s, x__~~x__]
检查以上输出以及出现字符串“ CC”的一种情况。
f@Out[336]
f@Out[337]
f@Out[338]
f["ABCBACBCABCBABCACBACCABCACBCABACBABCABACBCACBACABCACBA"]
正确
正确
正确
错误
exec"x+=[1-y for y in x];"*n
节省6个字符,却以效率为代价-嘿,这是高尔夫!