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
?Réponses:
Python 2,
6863 octetsRenvoie True ou False . Testez-le sur Ideone .
la source
Rétine , 11 octets
Essayez tous les cas de test. Les deux premiers octets le rendent multiligne.
Interprétation assez littérale des règles, utilise évidemment regex, comme tous les programmes Retina.
la source
perl -pE '$_=/^((.+)\2)+$/'
Gelée , 10 octets
Pas vraiment efficace ... Essayez-le en ligne!
Comment ça marche
la source
Haskell,
7269 octets (pas d'expression régulière)Une approche par force brute. Essayez-le sur Ideone .
Merci à BlackCap pour -3 octets.
Explication
La fonction d'assistance
g
prend une liste de chaînes et vérifie qu'elle est constituée de paires de chaînes identiques, comme["aa","aa","bba","bba","ab","ab"]
. La fonction principale (anonyme) divise une chaîne de toutes les manières possibles et vérifie qu'au moins un fractionnement aboutit à une liste quig
accepte.la source
or.map
parany
any g.map(words.concat)
et je pensais « hey, je peux le golfany
àor
» ...Python 2, 60 octets
J'espère que c'est correct. Il fonctionne assez lentement et
and
ne semble pas optimal.la source
and
vous avez là-bas.Gelée , 12 octets
Deux octets de plus que mon autre réponse , mais cette approche est beaucoup plus efficace et gère tous les cas de test sauf un.
Essayez-le en ligne!
Comment ça marche
la source
Pyth - sans regex -
1312 octetsVérifie si l'une des partitions est composée de toutes les chaînes égales lorsqu'elles sont coupées en deux.
Suite de tests .
la source
Brachylog , 14 octets (pas d'expression régulière)
Essayez-le en ligne!
C'est trop lent pour certains des cas de test
Explication
la source
JavaScript (ES6), aucune expression rationnelle,
7574 octetsRetourne
1
pour jumelage sinon0
. Edit: 1 octet enregistré grâce à @ edc65.la source
substr
sans modifieri
. Mais avecslice
3 répétitions, vous pouvez enregistrer 1 octet en lei
? Je me rends compte ques.substr(i,i+i)
renvoie le même ques.slice(i,i+=i)
mais j'utilise ensuite la valeur modifiée dei
plus tard ...s.substr(i,i)
2 octets de moins, puiss.slice(i+i)
2 octets de plusPython, 58 octets
Ceci est basé sur la méthode récursive de Dennis . L'astuce de négation booléenne est également prise à partir de là.
La nouvelle idée est de récurrer sur les partitions
(p,s)
de la chaîne d'origine en commençant par('',s)
et en déplaçant à plusieurs reprises le premier caractère des
pour qu'il soit le dernier caractère dep
. Cela permet aux pièces d'être référencées directement sans trancher la chaîne. Mais, comme la partition commence parp
vide, nous devons faire attention à éviter les boucles d'f(s)
appel infiniesf(s)
.la source
JavaScript (ES6), 24 octets
Probablement pas plus court que cela.
la source
\2
?\1
, maisaab
revienttrue
... merci pour le correctif.PHP, 40 octets
affiche 0 pour faux et 1 pour vrai
la source
Python,
6664 octetsMerci @Zgarb pour -1 octet!
Renvoie
True
ouFalse
.Essayez-le en ligne!
Toute aide au golf serait appréciée.
la source
Raquette 230 octets
Imprime un '!' pour chaque façon dont la chaîne est appariable. Imprime un '.' à la fin.
Non golfé:
Essai:
Sortie:
la source
Perl, 16 +2 = 18 octets (avec regex)
Courez avec les
-nl
drapeaux.-E
est libre.Courir comme:
Renvoie une liste des groupes de capture (une vérité) si couplable, une chaîne nulle si non couplable.
Explication
Les
-nl
drapeaux exécuteront le code dans une boucle (-n
), mettant l'entrée (avec le retour à la ligne retiré à cause de-l
) dans la variable à$_
chaque fois, puis évaluant le code chaque fois que l'entrée est entrée, jusqu'à ce que le programme se termine manuellement. L'-E
indicateur vous permet d'évaluer le code sur la ligne de commande et active lasay
commande.Si une correspondance est trouvée (par exemple, si la chaîne peut être jumelée), l'expression régulière renvoie une liste des groupes de capture, qui est évaluée comme une vérité, qui est ensuite transmise à
say
, et sortie. Si aucune correspondance n'est trouvée, l'expression régulière renvoie la chaîne vide, qui est évaluée à falsy, qui est ensuite passée àsay
, et sortie.Échantillon:
la source
GNU Prolog,
4946 octetsFonctionne probablement aussi dans d'autres variantes, bien qu'elles ne représentent pas toutes les chaînes de la même manière; La représentation de GNU Prolog est utile pour ce problème.
Il n'est pas clair si cela compte comme l'utilisation d'expressions régulières ou non. Il n'utilise aucune fonctionnalité de type regex, mais toute la sémantique du langage est similaire à celle de regex.
Nouvelle version (utilise l'astuce de récursivité vue dans certaines autres réponses):
Ancienne version:
C'est un prédicat (l'équivalent de Prolog d'une fonction) appelé
s
, pas un programme complet. Utilisez-le comme ceci:Une caractéristique intéressante de l'ancienne solution est que si vous demandez à l'interprète "y a-t-il d'autres solutions?" via l'utilisation de
;
à l'true ?
invite (plutôt que de demander "y a-t-il une solution" en appuyant sur retour à l'invite, comme je l'ai fait ci-dessus), il renvoie "vrai" un nombre de fois égal au nombre de façons différentes dont la chaîne peut être exprimée sous la forme donnée (par exemple, il renvoie "vrai" deux fois avecs("aaaa").
, car cela peut être analysé comme(a a)(a a)
ou comme(aa aa)
).Les programmes Prolog sont souvent réversibles (permettant
s
de générer une liste de chaînes avec la propriété donnée). L'ancien n'est pas (il entre dans une boucle infinie), mais c'est à cause de la méthode golfée que j'ai utilisée pour m'assurer que C n'est pas vide; si vous réécrivez le programme pour spécifier C comme non vide explicitement, il génère des chaînes de la forme "aa", "aabb", "aabbcc", etc. (Prolog étant Prolog, il ne spécifie pas les identités des caractères qui les rendent , juste une spécification des caractères identiques). Le plus récent génère des chaînes de la forme "aa", "abab", "abcabc", etc. il s'agit d'une boucle infinie à part entière, et n'atteint donc jamais le point auquel elle se bloquerait en raison de l'échec de la détection d'une chaîne de longueur nulle.la source
Brainfuck, 177 octets
Formaté:
Attend une entrée sans retour à la ligne. Imprime
\x00
pour faux et\x01
pour vrai.Essayez-le en ligne.
Cela implémente la recherche en profondeur. En particulier: vérifiez les préfixes répétés de longueur croissante à partir du suffixe actuel, puis passez au suffixe suivant si une correspondance est trouvée, sinon revenez en arrière.
Au début, la chaîne est inversée et une sentinelle
\x01
est placée à la fin.La bande est divisée en nœuds à 4 cellules. La configuration de la mémoire d'un nœud est:
c h x 0
où
c
est le caractère,h
est un indicateur pour savoir si le caractère se trouve dans la première moitié d'un préfixe répété, etx
est un indicateur pour garder une trace de la paire de caractères en cours de comparaison. Lesh
drapeaux restent en place tandis que lesx
drapeaux forment une fenêtre mobile.Si la chaîne peut être jumelée, le pointeur atterrit à côté de la sentinelle à la fin de la boucle principale; sinon, le pointeur tombe du côté gauche de la chaîne lors du retour en arrière.
la source
Brachylog , 5 octets
Essayez-le en ligne!
Notez que cet algorithme peut prendre très longtemps, en particulier sur les cas de falsey, car il vérifie chaque partition possible de la chaîne d'entrée.
Explication
Pour une chaîne d'entrée comme
"ababcc"
,~c
essaie différentes partitions jusqu'à ce qu'elle arrive["abab", "cc"]
, à quel point~j
réussit pour les deux éléments de la liste, lesᵐ
sorties["ab", "c"]
et le prédicat réussit.la source
R , 31 octets
Essayez-le en ligne!
Basé sur la réponse de Retina.
R , 129 octets
Et voici une réponse originale, non regex:
Essayez-le en ligne!
la source
Lithp , 57 caractères
Exemple d'utilisation:
la source