Toán học 159 140 134
Chỉnh sửa : Viết lại hoàn chỉnh, sử dụng đệ quy ( NestWhile
). Nhanh hơn nhiều và không có nỗ lực lãng phí.
Mã
g@n_:=StringTake[NestWhile[#~StringReplace~{"A"-> "ABCBACBCABCBA","B"-> "BCACBACABCACB",
"C"->"CABACBABCABAC"}&,"ABC",StringLength[#]<n&],n]
Sử dụng
Phải mất khoảng 1/40 giây để tạo ra một từ miễn phí hình vuông có một triệu ký tự.
g[10]
g[53]
g[506]
AbsoluteTiming[g[10^6];]

Đang xác minh
f
sẽ kiểm tra xem một chuỗi có vuông không.
f[s_]:=StringFreeQ[s, x__~~x__]
Kiểm tra các đầu ra ở trên và một trường hợp trong đó chuỗi "CC" xuất hiện.
f@Out[336]
f@Out[337]
f@Out[338]
f["ABCBACBCABCBABCACBACCABCACBCABACBABCABACBCACBACABCACBA"]
Đúng Đúng
Đúng
Đúng
Sai
exec"x+=[1-y for y in x];"*n
tiết kiệm 6 ký tự với chi phí hiệu quả - nhưng hey đây là golf!