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 символів за рахунок ефективності - але ей, це гольф!