Uma cadeia de caracteres é quadrada se não contiver substring duas vezes seguidas.
É possível ter uma palavra arbitrariamente longa e sem quadrados usando um alfabeto de três letras.
Escreva um programa que aceite um número inteiro positivo n de stdin e imprima qualquer palavra livre de comprimento n, usando caracteres A
, B
e C
.
O menor código vence.
exec"x+=[1-y for y in x];"*n
economiza 6 caracteres em detrimento da eficiência - mas ei, isso é golfe!Python,
129125119Usando o método de John Leech, conforme descrito na página wiki vinculada.
fonte
'ABCBCACABBCAABCCABBCACABABCBCACABBCAABC'[ord(t)%5::3]
while s[:n]==s:
salva mais 1Python2 - 112 caracteres
Isso é bastante ineficiente. Ele gera uma string muito muito muito mais longa do que o necessário e a trunca. Por exemplo, o intermediário
s
paran=7
tem 62748517 (13 n ) caracteresfonte
Mathematica
159 140134Editar : Uma reescrita completa, usando recursão (
NestWhile
). Muito mais rápido e sem esforço desperdiçado.Código
Uso
Demora aproximadamente 1/40 s para gerar uma palavra livre quadrada ternária com um milhão de caracteres.
Verificando
f
testará se uma string é quadrada livre.Verificando as saídas acima e um caso em que a string "CC" aparece.
fonte