Mathematica 159 140 134
Düzenleme : Özyineleme ( NestWhile) kullanarak tam bir yeniden yazma . Çok daha hızlı ve boşa harcama.
kod
g@n_:=StringTake[NestWhile[#~StringReplace~{"A"-> "ABCBACBCABCBA","B"-> "BCACBACABCACB",
"C"->"CABACBABCABAC"}&,"ABC",StringLength[#]<n&],n]
kullanım
Bir milyon karakterle üçlü kare serbest bir kelime oluşturmak yaklaşık 1/40 saniye sürer.
g[10]
g[53]
g[506]
AbsoluteTiming[g[10^6];]

Doğrulanıyor
f dizenin karesız olup olmadığını test eder.
f[s_]:=StringFreeQ[s, x__~~x__]
Yukarıdaki çıkışların ve "CC" dizesinin göründüğü bir durumun kontrol edilmesi.
f@Out[336]
f@Out[337]
f@Out[338]
f["ABCBACBCABCBABCACBACCABCACBCABACBABCABACBCACBACABCACBA"]
Gerçek
Gerçek
Doğru
Yanlış
exec"x+=[1-y for y in x];"*nverimlilik - 6 pahasına kaydeder ama hey bu golf!