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
?Antworten:
Python 2,
6863 BytesGibt True oder False zurück . Teste es auf Ideone .
quelle
Retina , 11 Bytes
Probieren Sie alle Testfälle aus. Die ersten zwei Bytes machen es mehrzeilig.
Ziemlich wörtliche Interpretation der Regeln, verwendet offensichtlich Regex, wie alle Retina-Programme.
quelle
perl -pE '$_=/^((.+)\2)+$/'
Gelee , 10 Bytes
Nicht gerade effizient ... Probieren Sie es online!
Wie es funktioniert
quelle
Haskell,
72 bis69 Bytes (kein regulärer Ausdruck)Ein Brute-Force-Ansatz. Probieren Sie es auf Ideone .
Danke an BlackCap für -3 Bytes.
Erläuterung
Die Hilfsfunktion erstellt
g
eine Liste von Zeichenfolgen und prüft, ob sie aus Paaren identischer Zeichenfolgen besteht, z["aa","aa","bba","bba","ab","ab"]
. Die (anonyme) Hauptfunktion teilt einen String auf alle möglichen Arten und überprüft, ob mindestens eine Aufteilung zu einer Liste führt, dieg
akzeptiert.quelle
or.map
mitany
any g.map(words.concat)
und dachte : „Hey, ich kann Golf dieany
zuor
“ ...Python 2, 60 Bytes
Ich hoffe das ist richtig. Es läuft ziemlich langsam und das
and
sieht nicht optimal aus.quelle
and
du da hast.Gelee , 12 Bytes
Zwei Bytes länger als meine andere Antwort , aber dieser Ansatz ist viel effizienter und behandelt alle Testfälle bis auf einen.
Probieren Sie es online!
Wie es funktioniert
quelle
Pyth - Kein Regex -
1312 BytesÜberprüft, ob eine der Partitionen aus allen Zeichenfolgen besteht, die einander entsprechen, wenn sie in zwei Teile geteilt werden.
Test Suite .
quelle
Brachylog , 14 Bytes (kein regulärer Ausdruck)
Probieren Sie es online!
Dies ist für einige Testfälle zu langsam
Erläuterung
quelle
JavaScript (ES6), kein regulärer Ausdruck,
75 bis74 ByteReturns
1
für paarbar anders0
. Bearbeiten: 1 Byte dank @ edc65 gespeichert.quelle
substr
ohne Änderungi
. Aber mitslice
3-i
? Mir ist klar, dass diess.substr(i,i+i)
dasselbes.slice(i,i+=i)
ergibt, aber ich verwende dann den geänderten Wert voni
später ...s.substr(i,i)
2 bytes weniger, danns.slice(i+i)
2 bytes mehrPython, 58 Bytes
Dies basiert auf der rekursiven Methode von Dennis . Der Boolesche Negationstrick wird auch von dort übernommen.
Die neue Idee besteht darin, Partitionen
(p,s)
der ursprünglichen Zeichenfolge zu('',s)
wiederholen, indem das erste Zeichen vons
als letztes Zeichen von beginnend wiederholt verschoben wirdp
. Auf diese Weise können die Teile direkt referenziert werden, ohne dass ein Aufschneiden der Zeichenfolgen erforderlich ist. Aber, da die Partition mit beginntp
leer, müssen wir vorsichtig sein , um Endlosschleifen von zu vermeidenf(s)
Berufungf(s)
.quelle
JavaScript (ES6), 24 Byte
Wird wahrscheinlich nicht kürzer.
quelle
\2
?\1
,aab
kehrt aber zurücktrue
... danke für die Korrektur.PHP, 40 Bytes
gibt 0 für falsch und 1 für wahr aus
quelle
Python,
6664 BytesDanke @Zgarb für -1 Byte!
Rückgabe
True
oderFalse
.Probieren Sie es online!
Jede Hilfe beim Golfspielen wäre willkommen.
quelle
Schläger 230 Bytes
Druckt ein '!' für jede Art und Weise, in der die Zeichenfolge paarbar ist. Druckt ein '.' Am Ende.
Ungolfed:
Testen:
Ausgabe:
quelle
Perl, 16 +2 = 18 Bytes (mit Regex)
Laufen Sie mit den
-nl
Fahnen.-E
ist gratis.Rennen wie:
Gibt eine Liste der Capture-Gruppen (eine Wahrheit) zurück, wenn sie paarbar sind, und eine Nullzeichenfolge, wenn sie nicht paarbar ist.
Erläuterung
Die
-nl
Flags führen den Code in einer Schleife (-n
) aus, wobei die Eingabe (mit wegen entferntem Zeilenumbruch-l
)$_
jedes Mal in die Variable eingefügt und der Code bei jeder Eingabe ausgewertet wird, bis das Programm manuell beendet wird. Mit dem-E
Flag können Sie Code in der Befehlszeile auswerten und densay
Befehl aktivieren.Wenn eine Übereinstimmung gefunden wird (z. B. wenn die Zeichenfolge gepaart werden kann), gibt der Regex eine Liste der Erfassungsgruppen zurück, die zu einer Wahrheit ausgewertet wird, die dann an übergeben
say
und ausgegeben wird. Wenn keine Übereinstimmung gefunden wird, gibt der reguläre Ausdruck die leere Zeichenfolge zurück, die als falsch ausgewertet wird, die dann an übergebensay
und ausgegeben wird.Probe:
quelle
GNU Prolog,
4946 BytesFunktioniert wahrscheinlich auch in anderen Varianten, obwohl sie nicht alle Zeichenfolgen auf die gleiche Weise darstellen. Die Darstellung von GNU Prolog ist für dieses Problem nützlich.
Es ist unklar, ob dies als Verwendung von Regex gilt oder nicht. Es werden keine regulären Ausdrücke verwendet, aber die gesamte Semantik der Sprache ähnelt der von regulären Ausdrücken.
Neue Version (verwendet den Rekursionstrick, der in einigen anderen Antworten zu sehen ist):
Ältere Version:
Dies ist ein aufgerufenes Prädikat (Prolog-Äquivalent einer Funktion)
s
, kein vollständiges Programm. Benutze es so:Ein interessantes Merkmal der älteren Lösung ist, dass wenn Sie den Interpreter fragen, "gibt es mehr Lösungen?" Bei Verwendung von
;
an dertrue ?
Eingabeaufforderung (anstatt zu fragen, ob "Gibt es eine Lösung?", bei Drücken der Eingabetaste an der Eingabeaufforderung, wie oben beschrieben) wird so oft "true" zurückgegeben, wie die Zeichenfolge auf verschiedene Arten ausgedrückt werden kann in der angegebenen Form (zB gibt es mit "true" zweimal zurücks("aaaa").
, da dies als(a a)(a a)
oder als geparst werden kann)(aa aa)
).Prolog - Programme sind oft reversibel (so dass generieren eine Liste von Strings mit der angegebenen Eigenschaft). Das ältere ist es nicht (es geht in eine Endlosschleife), aber das liegt an der Golfmethode, die ich verwendet habe, um sicherzustellen, dass C nicht leer ist; Wenn Sie das Programm so umschreiben, dass C explizit als nicht leer angegeben wird, werden Zeichenfolgen der Form "aa", "aabb", "aabbcc" usw. generiert bis, nur eine Angabe, welche Zeichen gleich sind). Das neuere erzeugt Zeichenketten der Form "aa", "abab", "abcabc" und so weiter; Dies ist eine Endlosschleife für sich und trifft daher nie den Punkt, an dem sie hängen bleiben würde, weil eine Zeichenfolge mit der Länge Null nicht erkannt wird.
s
quelle
Brainfuck, 177 Bytes
Formatiert:
Erwartet Eingaben ohne abschließende Zeilenumbrüche. Druckt
\x00
für falsch und\x01
für wahr.Probieren Sie es online aus.
Dies implementiert die Tiefensuche. Insbesondere: Überprüfen Sie ab dem aktuellen Suffix, ob wiederholte Präfixe mit zunehmender Länge vorhanden sind, und wechseln Sie dann zum nächsten Suffix, wenn eine Übereinstimmung gefunden wird.
Zu Beginn ist die Zeichenfolge umgekehrt und ein Sentinel
\x01
am Ende platziert.Das Band ist in 4-Zellen-Knoten unterteilt. Das Speicherlayout eines Knotens ist:
c h x 0
Dabei
c
handelt es sichh
um ein Flag, das angibt, ob sich das Zeichen in der ersten Hälfte eines wiederholten Präfixes befindet, undx
um ein Flag, mit dem das aktuelle Zeichenpaar verfolgt wird, das verglichen wird. Dieh
Fahnen bleiben an Ort und Stelle, während diex
Fahnen ein sich bewegendes Fenster bilden.Wenn die Zeichenfolge gepaart werden kann, landet der Zeiger neben dem Sentinel am Ende der Hauptschleife. Andernfalls fällt der Zeiger beim Zurückverfolgen von der linken Seite der Zeichenfolge ab.
quelle
Brachylog , 5 Bytes
Probieren Sie es online!
Beachten Sie, dass dieser Algorithmus sehr lange dauern kann , insbesondere in Falsey-Fällen, da er jede mögliche Partition der Eingabezeichenfolge überprüft.
Erläuterung
Versucht für eine Eingabezeichenfolge wie
"ababcc"
,~c
verschiedene Partitionen, bis es zu kommt["abab", "cc"]
, an welchem Punkt~j
erfolgreich für beide Elemente der Liste,ᵐ
Ausgaben["ab", "c"]
und das Prädikat erfolgreich ist.quelle
R , 31 Bytes
Probieren Sie es online!
Basierend auf der Retina-Antwort.
R , 129 Bytes
Und hier ist eine originelle, nicht reguläre Antwort:
Probieren Sie es online!
quelle
Lithp , 57 Zeichen
Beispielnutzung:
quelle