답변:
편집 : 재귀 ( 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 문자를 절약 할 수 있습니다. 그러나 이것은 골프입니다!