Isto é retirado desta questão (com permissão de curso). Vou citar:
Crie uma função que use uma string e ela retorne true ou false com base em se a entrada consiste em apenas uma sequência de caracteres repetida. O comprimento de uma determinada sequência é sempre maior que 1 e a sequência de caracteres deve ter pelo menos uma repetição.
Alguns exemplos:
'aa' //true
'aaa' //true
'abcabcabc' //true
'aba' //false
'ababa' //false
'weqweqweqweqweqw' // false
Especificamente, a verificação de uma string estritamente composta por substrings repetidos ( Update ) pode gerar qualquer representação verdadeira ou falsa, mas nenhum erro de saída, por favor. Strings estritamente alfanuméricos. Caso contrário, regras de golfe com código padrão. Este é o Code Golf, portanto, a resposta mais curta em bytes para cada idioma vence.
code-golf
decision-problem
ouflak
fonte
fonte
Respostas:
Braquilog ,
43 bytesExperimente online!
Explicação
O programa imprime
true.
se as restrições podem ser satisfeitas e,false.
se não.fonte
~j↙
ou=Ṁc
trabalhar antes de perceber que você postou isso há uma horaġ=Ṁ
Ṁ
é uma variável restrita a ser uma lista de dois ou mais elementos)JavaScript (ES6), 22 bytes
Retorna um valor booleano.
Experimente online!
Sem uma expressão regular,
3329 bytesRetorna
null
(falsy) ou um objeto (truthy).Experimente online!
Nota: tecnicamente,s é convertido em uma expressão regular para match () , portanto o título acima é uma mentira.
fonte
grep, 19
Teste
Saída:
fonte
Japonês , 6 bytes
Guardou um byte graças a @Shaggy
Experimente online!
fonte
p<space>
por²
para salvar um byte.Java,
2524 bytes-1 byte graças a Olivier Grégoire!
Resposta regex chata
Experimente online!
É apenas 1 byte a mais do que a resposta python aaaaa, estou empatado agora :)fonte
$
pois omatches
método é uma correspondência exata, não uma correspondência de substring por padrão.matches
adiciona seu próprio$
ao regex. Obrigado!Excel, 26 bytes
Entradas de A1, saídas para qualquer célula que você colocar nesta fórmula.
fonte
A
) e definir isso como sua entrada.A1
também não são uma "variável", pois contém o valor de entrada? :)R , 28 bytes
Experimente online!
Versão simples do Regex. R é (às vezes) muito semelhante ao Python, então isso é semelhante à resposta regex do TFeld no Python 2, embora mais curta!
Pergunta (se alguém souber a resposta)
Ainda estou confuso por que isso funciona, pois a substring pode ter qualquer tamanho e sempre funcionará, e ainda funciona quando adiciono uma letra à frente de uma string válida, como "cABABABABAB". Se eu pessoalmente ler o regex, vejo
(.+)
, que captura qualquer grupo de qualquer tamanho. E depois\\1+$
que repete o grupo capturado inúmeras vezes até o final.Então, por que ele não captura apenas "AB" e descobre que é repetido até o final da string, principalmente porque não há nenhuma restrição especificada sobre onde a substring pode começar?
fonte
perl=TRUE
faz com que ela corresponda ao cABABAB, como seria de esperar. A execuçãogrep -E '(.*)\1+$'
no bash também corresponde ao cABABAB, mesmo quegrep -E
use ERE, o mesmo tipo de expressão regular R deve oferecer suporte..+
no início de um padrão para^.+
é uma otimização importante, mas se a.+
captura de dentro estiver parecendo, ela deixa de ser válida.Retina 0.8.2 , 9 bytes
Experimente online! O link inclui casos de teste.
fonte
Geléia ,
54 bytesVejo agora que a melhor maneira é seguir o método do xnor !
Um link monádico que aceita uma lista de caracteres e gera um número inteiro - o menor comprimento possível de uma fatia repetida ou zero, se não houver nenhum. Observe que zero é falsey, enquanto números diferentes de zero são verdadeiros no Jelly.
Experimente online!
Quão?
fonte
Perl 5
-p
, 14 bytesExperimente online!
fonte
Python 2 , 24 bytes
Experimente online!
Roubado descaradamente da resposta de xnor à pergunta original.
Versão mais intuitiva:
Python 2 ,
595553 bytesExperimente online!
Versão regex chata:
Python 2 , 44 bytes
Experimente online!
fonte
Wolfram Language (Mathematica) ,
2423 bytesExperimente online!
fonte
Pyke , 4 bytes
Experimente aqui!
fonte
J ,
26 25 1514 bytesUsando o método xnor
Experimente online!
original (duas abordagens diferentes)
J , 25 bytes
Experimente online!
J , 26 bytes
Experimente online!
fonte
PowerShell,
2324 bytes+1 byte para corresponder totalmente às regras
Experimente online!
Muito chato. Com base nas outras respostas do Regex. Felizmente, o PowerShell não usa
\
como caractere de escape!fonte
true
paraaabcabc
C # (compilador interativo do Visual C #) , 70 bytes
adaptação descarada do xnor ( 46 bytes )
Minha solução não Regex:
Explicação:
Substitua todas as subseqüências possíveis iniciadas no índice 0 por uma sequência vazia. Se o resultado for uma sequência vazia, a sequência será totalmente composta dessa substring. Como isso inclui avaliar a sequência inteira com ela mesma, a quantidade de resultados esperados deve ser maior que 1.
Exemplo: abcabc
Possíveis substrings começando no índice 0:
Se os substituirmos por cadeias vazias
Como existe uma substring diferente de 'abcabc' que retorna uma string vazia, a string é totalmente composta de outra substring ('abc')
Experimente online!
fonte
Python 3 ,
62605654 bytes-4 bytes thanx ao ArBo
Experimente online!
fonte
f=
pode ser descartado; funções anônimas são geralmente permitidas. Além disso, alternando para o Python 2 e verificando a associação de uma lista em vez daany
construção, você pode obter 55 bytesJaponês , 10 bytes
Retorna um número positivo se for verdade e 0 se falsey. Se você quiser uma saída bool, basta adicionar
-¡
sinalizadorExperimente online!
fonte
Casca , 6 bytes
Experimente online!
Sinto que esse é um byte a mais do que o ideal, mas não consegui encontrar um arranjo que tornasse a composição explícita
ȯ
desnecessária.Explicação
fonte
€htD¹
evita oȯ
.λ€htD¹
mas não sabia que lambdas seriam adicionadas implicitamenteMathematica 11.x, 74 bytes
onde, por toda parte
#
representa a sequência de entrada elocaliza substrings da string de entrada que correspondem ao padrão
Esse padrão requer correspondências,
x
deve começar no início da sequência e deve satisfazer a condição de que (1) a correspondência não é a sequência de entrada inteira e (2) se substituirmos as ocorrências da correspondência na sequência de entrada pela sequência vazia nós obtemos a string vazia. Por fim, comparando a lista de correspondências com a lista vazia,é
True
se a lista de correspondências não for vazia eFalse
se a lista de correspondências estiver vazia.Casos de teste:
e
fonte
Python 3, 84 bytes
Utiliza
textwrap.wrap
(graças a esta resposta ) para dividir a cadeia em pedaços de comprimenton
para testar cada comprimento possível de substring repetido. As partes divididas são comparadas entre si adicionando-as a um conjunto. Se todas as peças forem iguais e o conjunto tiver comprimento 1, a sequência deverá ser repetida. Eu usei em<2
vez de,==1
porque ele salva um byte, e o comprimento da string de entrada foi garantido maior que zero.Se não houver
n
quais substrings repetidos de comprimenton
compõem a cadeia inteira, retorne false para toda a função.fonte
05AB1E , 5 bytes
O método xnor da pergunta anterior também parece ótimo no 05AB1E.
Experimente online! ou como um conjunto de testes
Explicação
fonte
Limpar \ limpo , 73 bytes
Não usa regex.
Experimente online!
Define
$ :: [Char] -> Bool
.Verifica se a string especificada é um prefixo da repetição de qualquer sub-string retirada do final.
fonte
C ++ (gcc) , 36 bytes
Experimente online!
Outra porta da solução do xnor. Usa uma macro para expandir o argumento na expressão. O argumento é assumido como sendo do tipo
std::string
.fonte
Variável QlikView, 27 bytes
Isso deve ser definido como uma variável, que permite passar parâmetros, por exemplo,
$1
como seu valor de entrada.Ele retorna
0
ou-1
(equivalente àTRUE()
função do QlikView ).fonte
Rápido, 196 bytes
Experimente online!
fonte
Ícone , 46 bytes
Experimente online!
Outra porta da solução do xnor.
fonte
K (oK) , 29 bytes
Experimente online!
fonte
Vermelho , 72 bytes
Experimente online!
Retorna
1
paraTrue
fonte
T-SQL, 47 bytes
Usando o método do @ Xnor :
Mantendo a resposta antiga, pois contém um bom jogo de golfe (67 bytes):
Explicação: Este script está tentando repetidamente substituir a entrada '@y' pelos primeiros caracteres '@' da entrada '@y' por nada, enquanto aumenta '@'.
Eventualmente, o resultado ficará vazio. Se isso acontecer quando a variável de loop for igual ao comprimento do varchar, o critério será falso / 0 porque '@' = len (@y) (não houve varchar repetido).
pode ser jogado neste
porque o comprimento de '@y' não pode ser 0 e '@' nunca excederá o comprimento @y.
Experimente online
fonte