Строка не содержит квадратов, если она не содержит подстроки дважды подряд.
Можно использовать произвольно длинное слово без квадратов, используя трехбуквенный алфавит.
Напишите программу, которая принимает положительное целое число n из стандартного ввода и печатает любое слово без квадратов длины n, используя символы A
, B
и C
.
Самый короткий код выигрывает.
exec"x+=[1-y for y in x];"*n
экономит 6 символов за счет эффективности - но эй, это гольф!Питон,
129125119Использование метода Джона Лича, как описано на связанной странице вики.
источник
'ABCBCACABBCAABCCABBCACABABCBCACABBCAABC'[ord(t)%5::3]
while s[:n]==s:
сохраняет еще 1Python2 - 112 символов
Это довольно неэффективно. Он генерирует намного более длинную строку, чем требуется, а затем усекает ее. Например, промежуточное значение
s
дляn=7
длиной 62748517 (13 n ) символовисточник
Mathematica
159 140134Редактировать : полное переписывание с использованием рекурсии (
NestWhile
). Намного быстрее и без усилий.Код
Применение
Требуется приблизительно 1/40 секунды, чтобы сгенерировать слово без троичного квадрата с одним миллионом символов.
Проверка
f
проверит, является ли строка свободной от квадратов.Проверка вышеприведенных выходных данных и один случай, в котором появляется строка «CC».
источник