var QUESTION_ID=98252,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/98252/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
ab
?Respostas:
Python 2,
6863 bytesRetorna Verdadeiro ou Falso . Teste em Ideone .
fonte
Retina , 11 bytes
Experimente todos os casos de teste. Os dois primeiros bytes o tornam multi-linhas.
Uma interpretação bastante literal das regras, obviamente usa regex, como todos os programas Retina.
fonte
perl -pE '$_=/^((.+)\2)+$/'
Gelatina , 10 bytes
Não é exatamente eficiente ... Experimente online!
Como funciona
fonte
Haskell,
7269 bytes (sem regex)Uma abordagem de força bruta. Experimente em Ideone .
Graças ao BlackCap por -3 bytes.
Explicação
A função auxiliar
g
pega uma lista de cadeias e verifica se consiste em pares de cadeias idênticas, como["aa","aa","bba","bba","ab","ab"]
. A função principal (anônima) divide uma string de todas as maneiras possíveis e verifica se pelo menos uma divisão resulta em uma lista queg
aceita.fonte
or.map
porany
any g.map(words.concat)
e pensei "hey, eu posso golf oany
deor
" ...Python 2, 60 bytes
Eu espero que isto esteja correto. Ele roda bem devagar e
and
não parece ótimo.fonte
and
.Gelatina , 12 bytes
Dois bytes a mais que minha outra resposta , mas essa abordagem é muito mais eficiente e lida com todos, exceto um dos casos de teste.
Experimente online!
Como funciona
fonte
Pyth - No Regex -
1312 bytesVerifica se alguma das partições é composta por todas as cadeias iguais entre si quando cortadas em duas.
Conjunto de Teste .
fonte
Braquilog , 14 bytes (sem regex)
Experimente online!
Isso é muito lento para alguns dos casos de teste
Explicação
fonte
JavaScript (ES6), sem regexp,
7574 bytesRetorna
1
para emparelhado caso contrário0
. Editar: salvou 1 byte graças a @ edc65.fonte
substr
sem modificari
. Mas comslice
repetidos 3 vezes você pode economizar 1 byte aliasing loi
? Eu percebo ques.substr(i,i+i)
retorna a mesmas.slice(i,i+=i)
, mas eu, em seguida, usar o valor modificado dei
mais tarde ...s.substr(i,i)
2 bytes menos, entãos.slice(i+i)
2 bytes maisPython, 58 bytes
Isso é baseado no método recursivo de Dennis . O truque de negação booleana também é adotado a partir daí.
A nova idéia é repetir as partições
(p,s)
da sequência original iniciando('',s)
e movendo repetidamente o primeiro caractere des
para ser o último caractere dep
. Isso permite que as peças sejam referenciadas diretamente sem cortar as cordas. Mas, como a partição começa comp
vazio, devemos ter cuidado para evitar ciclos infinitos def(s)
chamadasf(s)
.fonte
JavaScript (ES6), 24 bytes
Provavelmente não fica mais curto que isso.
fonte
\2
?\1
, masaab
retornatrue
... obrigado pela correção.PHP, 40 bytes
imprime 0 para falso e 1 para verdadeiro
fonte
Python,
6664 bytesObrigado @Zgarb por -1 byte!
Retorna
True
ouFalse
.Experimente online!
Qualquer ajuda no golfe seria apreciada.
fonte
Raquete 230 bytes
Imprime um '!' para cada maneira em que a sequência é pareada. Imprime um '.' no fim.
Ungolfed:
Teste:
Saída:
fonte
Perl, 16 +2 = 18 bytes (com regex)
Corra com as
-nl
bandeiras.-E
é grátis.Correr como:
Retorna uma lista dos grupos de captura (uma verdade) se emparelhados, cadeia nula se não emparelhados.
Explicação
o
-nl
sinalizadores executam o código em um loop (-n
), colocando a entrada (com a nova linha à direita removida por causa-l
) na variável a$_
cada vez e avaliando o código cada vez que a entrada é inserida, até que o programa seja finalizado manualmente. O-E
sinalizador permite avaliar o código na linha de comando e habilita osay
comando.Se uma correspondência for encontrada (por exemplo, se a sequência for emparelhada), o regex retornará uma lista dos grupos de captura, que são avaliados para uma verdade, que depois são passados para
say
e emitidos. Se nenhuma correspondência for encontrada, o regex retornará a cadeia vazia, avaliada como falsa, que é passada parasay
e emitida.Amostra:
fonte
GNU Prolog,
4946 bytesProvavelmente também funciona em outras variantes, embora nem todas representem seqüências de caracteres da mesma maneira; A representação do GNU Prolog é útil para este problema.
Não está claro se isso conta como usar regex ou não. Não está usando nenhum recurso parecido com regex, mas toda a semântica da linguagem é semelhante à do regex.
Nova versão (usa o truque de recursão visto em outras respostas):
Versão antiga:
Este é um predicado (equivalente a uma função do Prolog) chamado
s
, não um programa completo. Use-o assim:Uma característica interessante da solução mais antiga é que, se você perguntar ao intérprete "existem mais soluções?" via uso de
;
notrue ?
prompt (em vez de perguntar "existe alguma solução", pressionando return no prompt, como fiz acima), ele retorna "true" várias vezes igual ao número de maneiras diferentes pelas quais a string pode ser expressa na forma especificada (por exemplo, retorna "true" duas vezes coms("aaaa").
, pois isso pode ser analisado como(a a)(a a)
ou como(aa aa)
).Programas Prolog são geralmente reversíveis (permitindo
s
a gerar uma lista de strings com a propriedade dada). O mais antigo não é (entra em um loop infinito), mas é por causa do método de golfe que eu usei para garantir que C não seja vazio; se você reescrever o programa para especificar C como não vazio explicitamente, ele gerará sequências do formato "aa", "aabb", "aabbcc" e assim por diante (Prolog sendo Prolog, ele não especifica identidades para os caracteres que os fazem apenas uma especificação de quais caracteres são iguais). O mais recente gera sequências do formato "aa", "abab", "abcabc" e assim por diante; esse é um loop infinito por si só e, portanto, nunca atinge o ponto em que ficaria preso devido à falha em detectar uma cadeia de comprimento zero.fonte
Brainfuck, 177 bytes
Formatado:
Espera entrada sem uma nova linha à direita. Imprime
\x00
para falso e\x01
verdadeiro.Experimente online.
Isso implementa a pesquisa em profundidade. Em particular: verifique se há prefixos repetidos de tamanho crescente a partir do sufixo atual e, em seguida, passe para o próximo sufixo se uma correspondência for encontrada, caso contrário, volte.
No início, a corda é invertida e uma sentinela
\x01
é colocada no final.A fita é dividida em nós de 4 células. O layout da memória de um nó é:
c h x 0
onde
c
está o caractere,h
é um sinalizador para saber se o personagem está na primeira metade de um prefixo repetido ex
é um sinalizador para acompanhar o par atual de caracteres sendo comparado. Ash
bandeiras permanecem no lugar enquanto asx
bandeiras formam uma janela em movimento.Se a sequência for emparelhada, o ponteiro cairá próximo à sentinela no final do loop principal; caso contrário, o ponteiro cai do lado esquerdo da corda durante o retrocesso.
fonte
Braquilog , 5 bytes
Experimente online!
Observe que esse algoritmo pode levar muito tempo, especialmente em casos falsey, pois verifica todas as partições possíveis da string de entrada.
Explicação
Para uma sequência de entrada como
"ababcc"
,~c
tenta partições diferentes até que cheguem["abab", "cc"]
, momento em que~j
os itens da lista,ᵐ
saídas["ab", "c"]
e o predicado são bem-sucedidos.fonte
R , 31 bytes
Experimente online!
Com base na resposta da Retina.
R , 129 bytes
E aqui está uma resposta original e não regular:
Experimente online!
fonte
Lithp , 57 caracteres
Uso da amostra:
fonte