गणितज्ञ 159 140 134
संपादित करें : पुनरावर्ती ( 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__]
उपरोक्त आउटपुट और एक मामले की जांच करना जिसमें स्ट्रिंग "सीसी" दिखाई देती है।
f@Out[336]
f@Out[337]
f@Out[338]
f["ABCBACBCABCBABCACBACCABCACBCABACBABCABACBCACBACABCACBA"]
सच्चा
सच्चा
सच्चा
झूठा
exec"x+=[1-y for y in x];"*n
दक्षता की कीमत पर 6 चार्ट बचाता है - लेकिन हे यह गोल्फ है!