Mathematica 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__]
ตรวจสอบผลลัพธ์ข้างต้นและหนึ่งกรณีที่สตริง "CC" ปรากฏขึ้น
f@Out[336]
f@Out[337]
f@Out[338]
f["ABCBACBCABCBABCACBACCABCACBCABACBABCABACBCACBACABCACBA"]
ทรู
ทรู
ทรู
เท็จ
exec"x+=[1-y for y in x];"*n
ประหยัด 6 ตัวอักษรด้วยค่าใช้จ่ายของประสิทธิภาพ - แต่นี่มันคือสนามกอล์ฟ!