Una cadena es cuadrada si no contiene ninguna subcadena dos veces seguidas.
Es posible tener una palabra arbitrariamente larga sin cuadrados utilizando un alfabeto de 3 letras.
Escriba un programa que acepte un entero positivo n de stdin e imprima cualquier palabra cuadrada de longitud n, usando caracteres A
, B
y C
.
El código más corto gana.
exec"x+=[1-y for y in x];"*n
ahorra 6 caracteres a expensas de la eficiencia, pero bueno, ¡esto es golf!Python,
129125119Usando el método de John Leech como se describe en la página wiki vinculada.
fuente
'ABCBCACABBCAABCCABBCACABABCBCACABBCAABC'[ord(t)%5::3]
while s[:n]==s:
ahorra 1 másPython2 - 112 caracteres
Esto es bastante ineficiente. Genera una cadena mucho más larga que la requerida y luego la trunca. Por ejemplo, el intermedio
s
paran=7
tiene 62748517 (13 n ) caracteres de longitudfuente
Mathematica
159 140134Editar : una reescritura completa, utilizando recursión (
NestWhile
). Mucho más rápido y sin esfuerzo desperdiciado.Código
Uso
Se tarda aproximadamente 1/40 segundos en generar una palabra libre cuadrada ternaria con un millón de caracteres.
Verificando
f
probará si una cadena está libre de cuadrados.Verificando las salidas anteriores y un caso en el que aparece la cadena "CC".
fuente