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
?Jawaban:
Python 2,
6863 bytePengembalian Benar atau Salah . Uji di Ideone .
sumber
Retina , 11 byte
Coba semua test case. Dua byte pertama membuatnya multi-line.
Interpretasi harfiah dari aturan, jelas menggunakan regex, seperti semua program Retina akan.
sumber
perl -pE '$_=/^((.+)\2)+$/'
Jelly , 10 byte
Tidak tepat efisien ... Coba online!
Bagaimana itu bekerja
sumber
Haskell,
7269 byte (tidak ada regex)Pendekatan brute-force. Cobalah di Ideone .
Berkat BlackCap untuk -3 byte.
Penjelasan
Fungsi helper
g
mengambil daftar string, dan memeriksa apakah itu terdiri dari pasangan string yang identik, seperti["aa","aa","bba","bba","ab","ab"]
. Fungsi utama (anonim) membagi string dengan semua cara yang mungkin, dan memeriksa bahwa setidaknya satu pemisahan menghasilkan daftar yangg
menerima.sumber
or.map
denganany
any g.map(words.concat)
dan berpikir "hei, saya bisa bermain golfany
untukor
" ...Python 2, 60 byte
Saya harap ini benar. Ini berjalan sangat lambat dan
and
tidak terlihat optimal.sumber
and
Anda miliki di sana.Jelly , 12 byte
Dua byte lebih lama dari jawaban saya yang lain , tetapi pendekatan ini jauh lebih efisien dan menangani semua kecuali satu dari kasus uji.
Cobalah online!
Bagaimana itu bekerja
sumber
Pyth - Tanpa Regex -
1312 bytePeriksa apakah ada partisi yang terdiri dari semua string yang sama satu sama lain ketika dicincang menjadi dua.
Test Suite .
sumber
Brachylog , 14 byte (tanpa regex)
Cobalah online!
Ini terlalu lambat untuk beberapa kasus uji
Penjelasan
sumber
JavaScript (ES6), tanpa regexp,
7574 bytePengembalian
1
untuk dipasangkan sebaliknya0
. Sunting: Disimpan 1 byte berkat @ edc65.sumber
substr
tanpa mengubahi
. Tetapi denganslice
diulang 3 kali Anda dapat menyimpan 1 bytei
? Saya menyadari bahwas.substr(i,i+i)
mengembalikan samas.slice(i,i+=i)
tetapi saya kemudian menggunakan nilai yang dimodifikasii
nanti ...s.substr(i,i)
2 byte lebih sedikit, kemudians.slice(i+i)
2 byte lebihPython, 58 byte
Ini didasarkan pada metode rekursif Dennis . Trik negasi Boolean diambil dari sana juga.
Gagasan baru adalah untuk mengulangi partisi
(p,s)
string asli dengan mulai('',s)
dan berulang kali memindahkan karakter pertamas
menjadi karakter terakhirp
. Hal ini memungkinkan bagian-bagian untuk dirujuk secara langsung tanpa mengiris tali. Tetapi, karena partisi dimulai denganp
kosong, kita harus berhati-hati untuk menghindari loopf(s)
panggilan yang tak terbatasf(s)
.sumber
JavaScript (ES6), 24 byte
Mungkin tidak lebih pendek dari ini.
sumber
\2
?\1
, tetapiaab
kembalitrue
... terima kasih atas perbaikannya.PHP, 40 Bytes
mencetak 0 untuk false dan 1 untuk true
sumber
Python,
6664 byteTerima kasih @Zgarb untuk -1 byte!
Pengembalian
True
atauFalse
.Cobalah online!
Bantuan golf apa pun akan sangat dihargai.
sumber
Racket 230 byte
Mencetak '!' untuk setiap cara di mana string dapat dipasangkan. Mencetak '.' pada akhirnya.
Tidak Terkumpul:
Pengujian:
Keluaran:
sumber
Perl, 16 +2 = 18 byte (dengan regex)
Jalankan dengan
-nl
bendera.-E
gratis.Jalankan sebagai:
Mengembalikan daftar grup tangkapan (yang benar) jika dapat dipasangkan, string nol jika tidak dapat dipasangkan.
Penjelasan
The
-nl
bendera akan menjalankan kode dalam satu lingkaran (-n
), menempatkan input (dengan newline yang mengekor dihapus karena-l
) ke variabel$_
setiap kali, kemudian mengevaluasi kode masing-masing input waktu masuk, sampai program ini dihentikan secara manual. The-E
flag memungkinkan Anda mengevaluasi kode pada baris perintah, dan memungkinkansay
perintah.Jika kecocokan ditemukan (misalnya jika string dapat dipasangkan), maka regex mengembalikan daftar kelompok tangkap, yang mengevaluasi ke kebenaran, yang kemudian diteruskan ke
say
, dan output. Jika tidak ada kecocokan yang ditemukan, maka regex mengembalikan string kosong, yang dievaluasi menjadi falsy, yang kemudian diteruskan kesay
, dan output.Mencicipi:
sumber
GNU Prolog,
4946 byteMungkin bekerja di varian lain juga, meskipun mereka tidak semuanya mewakili string dengan cara yang sama; Representasi GNU Prolog sangat berguna untuk masalah ini.
Tidak jelas apakah ini dianggap menggunakan regex atau tidak. Itu tidak menggunakan fitur seperti regex, tetapi seluruh semantik bahasa mirip dengan regex.
Versi baru (menggunakan trik rekursi yang terlihat pada beberapa jawaban lain):
Versi yang lebih lama:
Ini adalah predikat (setara dengan fungsi Prolog) yang disebut
s
, bukan program lengkap. Gunakan seperti ini:Fitur yang menarik dari solusi yang lebih lama adalah bahwa jika Anda bertanya pada juru bahasa "apakah ada lebih banyak solusi?" melalui penggunaan
;
padatrue ?
prompt (daripada bertanya "apakah ada solusi" melalui menekan kembali pada prompt, seperti yang saya lakukan di atas), ia mengembalikan "true" beberapa kali sama dengan jumlah cara string dapat diekspresikan dalam bentuk yang diberikan (misalnya mengembalikan "true" dua kali dengans("aaaa").
, karena ini dapat diuraikan sebagai(a a)(a a)
atau sebagai(aa aa)
).Program prolog seringkali reversibel (memungkinkan
s
untuk menghasilkan daftar string dengan properti yang diberikan). Yang lebih tua tidak (itu masuk ke loop tak terbatas), tapi itu karena metode golf yang saya gunakan untuk memastikan bahwa C tidak kosong; jika Anda menulis ulang program untuk menentukan C sebagai nonempty secara eksplisit, itu menghasilkan string dari bentuk "aa", "aabb", "aabbcc", dan sebagainya (Prolog menjadi Prolog, itu tidak menentukan identitas untuk karakter yang membuatnya (hanya spesifikasi yang karakternya sama). Yang lebih baru menghasilkan string dari bentuk "aa", "abab", "abcabc", dan seterusnya; ini adalah loop tak terbatas dalam dirinya sendiri, dan dengan demikian tidak pernah mengenai titik di mana ia akan macet karena gagal mendeteksi string dengan panjang nol.sumber
Brainfuck, 177 byte
Diformat:
Mengharapkan input tanpa baris baru yang tertinggal. Mencetak
\x00
untuk false dan\x01
true.Cobalah online.
Ini mengimplementasikan pencarian mendalam-pertama. Khususnya: periksa awalan berulang dengan panjang yang meningkat mulai dari sufiks saat ini, kemudian pindah ke sufiks berikutnya jika kecocokan ditemukan, sebaliknya mundur.
Pada awalnya, string dibalik dan sentinel
\x01
ditempatkan di akhir.Rekaman itu dibagi menjadi 4-sel node. Tata letak memori suatu simpul adalah:
c h x 0
di mana
c
karakter,h
adalah bendera untuk apakah karakter berada di paruh pertama dari awalan yang diulang, danx
merupakan bendera untuk melacak pasangan karakter saat ini sedang dibandingkan. Theh
bendera tinggal di tempat sementarax
bendera membentuk jendela bergerak.Jika string dapat dipasangkan, pointer mendarat di sebelah sentinel pada akhir loop utama; jika tidak, penunjuk jatuh dari sisi kiri string sambil mundur.
sumber
Brachylog , 5 byte
Cobalah online!
Perhatikan bahwa algoritma ini bisa sangat lama, terutama pada kasus falsey, karena memeriksa setiap kemungkinan partisi string input.
Penjelasan
Untuk string input seperti
"ababcc"
,~c
coba partisi yang berbeda sampai tiba["abab", "cc"]
, di titik mana~j
berhasil untuk kedua item dari daftar,ᵐ
output["ab", "c"]
, dan predikat berhasil.sumber
R , 31 byte
Cobalah online!
Berdasarkan jawaban Retina.
R , 129 byte
Dan inilah jawaban asli dan non-regex:
Cobalah online!
sumber
Lithp , 57 karakter
Penggunaan sampel:
sumber