Ini diambil dari pertanyaan ini (dengan izin ofcourse). Saya akan mengutip:
Buat fungsi yang mengambil string, dan itu harus mengembalikan benar atau salah berdasarkan apakah input hanya terdiri dari urutan karakter yang diulang. Panjang string yang diberikan selalu lebih besar dari 1 dan urutan karakter harus memiliki setidaknya satu pengulangan.
Beberapa contoh:
'aa' //true
'aaa' //true
'abcabcabc' //true
'aba' //false
'ababa' //false
'weqweqweqweqweqw' // false
Secara khusus, pemeriksaan untuk string yang secara ketat terdiri dari substring berulang ( Pembaruan ) dapat menampilkan representasi benar atau salah, tetapi tidak ada output kesalahan. String alfanumerik yang ketat. Kalau tidak, aturan standar kode golf. Ini adalah Golf Code, jadi jawaban terpendek dalam byte untuk setiap bahasa menang.
code-golf
decision-problem
ouflak
sumber
sumber
Jawaban:
Brachylog ,
43 byteCobalah online!
Penjelasan
Program mencetak
true.
jika kendala dapat dipenuhi, danfalse.
jika tidak.sumber
~j↙
atau=Ṁc
bekerja sebelum saya melihat Anda memposting ini satu jam yang laluġ=Ṁ
Ṁ
adalah variabel yang dibatasi untuk menjadi daftar dua elemen atau lebih)JavaScript (ES6), 22 byte
Mengembalikan nilai Boolean.
Cobalah online!
Tanpa ekspresi reguler,
3329 byteMengembalikan salah
null
(falsy) atau objek (benar).Cobalah online!
NB: Secara teknis,s dikonversi menjadi ekspresi reguler untuk pertandingan () , jadi judul di atas adalah bohong.
sumber
grep, 19
Uji
Keluaran:
sumber
Japt , 6 byte
Disimpan satu byte berkat @Shaggy
Cobalah online!
sumber
p<space>
dengan²
untuk menyimpan byte.Java,
2524 byte-1 byte terima kasih kepada Olivier Grégoire!
Jawaban regex membosankan
Cobalah online!
Ini hanya 1 byte lebih lama dari jawaban python aaaaasaya terikat sekarang :)sumber
$
karenamatches
metode ini adalah pencocokan tepat, bukan pencocokan substring secara default.matches
menambahkan sendiri$
ke regex. Terima kasih!Excel, 26 byte
Input dari A1, output ke sel apa pun yang Anda masukkan rumus ini.
sumber
A
) Dan mengaturnya sebagai input Anda.A1
juga "variabel" karena mengandung nilai input? :)R , 28 byte
Cobalah online!
Versi Regex sederhana. R (kadang-kadang) sangat mirip dengan Python, jadi ini mirip dengan jawaban regex Python 2 TFeld, meskipun lebih pendek!
Pertanyaan (jika ada yang tahu jawabannya)
Saya masih bingung mengapa ini bekerja, karena substring dapat panjang dan akan selalu bekerja, dan masih berfungsi ketika saya menambahkan surat ke bagian depan string yang valid, seperti "cABABABABAB". Jika saya secara pribadi membaca regex, saya tahu
(.+)
, yang menangkap grup apa pun dengan panjang apa pun. Dan kemudian\\1+$
yang mengulangi kelompok yang ditangkap beberapa kali sampai akhir.Jadi mengapa tidak menangkap hanya "AB" dan menemukan bahwa itu diulangi sampai akhir string, terutama karena tidak ada batasan yang ditentukan di mana substring dapat mulai?
sumber
perl=TRUE
menjadikannya cocok denganABABAB, seperti yang Anda harapkan. Berlarigrep -E '(.*)\1+$'
di bash juga cocok denganABABAB, meskipungrep -E
menggunakan ERE, rasa regex R yang sama seharusnya mendukung..+
pada awal pola^.+
menjadi pengoptimalan penting, tetapi jika bagian.+
dalam menangkap parens itu berhenti valid.Retina 0.8.2 , 9 byte
Cobalah online! Tautan termasuk kasus uji.
sumber
Jelly ,
54 byteSaya melihat sekarang bahwa cara optimal adalah mengikuti metode xnor !
Tautan monadik yang menerima daftar karakter dan menghasilkan bilangan bulat - panjang sesingkat mungkin dari irisan berulang atau nol jika tidak ada. Perhatikan bahwa nol adalah falsey sedangkan angka bukan nol adalah benar di Jelly.
Cobalah online!
Bagaimana?
sumber
Perl 5
-p
, 14 byteCobalah online!
sumber
Python 2 , 24 byte
Cobalah online!
Tanpa malu-malu dicuri dari jawaban xnor terhadap pertanyaan awal.
Versi yang lebih intuitif:
Python 2 ,
595553 byteCobalah online!
Versi regex membosankan:
Python 2 , 44 byte
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) ,
2423 byteCobalah online!
sumber
Pyke , 4 byte
Coba di sini!
sumber
J ,
26 25 1514 byteMenggunakan metode xnor
Cobalah online!
asli (dua pendekatan berbeda)
J , 25 byte
Cobalah online!
J , 26 byte
Cobalah online!
sumber
PowerShell,
2324 byte+1 byte untuk sepenuhnya cocok dengan aturan
Cobalah online!
Membosankan. Berdasarkan jawaban Regex lainnya. Untungnya PowerShell tidak digunakan
\
sebagai karakter pelarian!sumber
true
untukaabcabc
C # (Visual C # Interactive Compiler) , 70 byte
Adaptasi shameless xnor ( 46 byte )
Solusi non Regex saya:
Penjelasan:
Ganti setiap substring yang mungkin yang dimulai pada indeks 0 dengan string kosong. Jika hasilnya adalah string kosong, string seluruhnya terbuat dari substring itu. Karena ini termasuk mengevaluasi seluruh string dengan sendirinya, jumlah hasil yang diharapkan harus lebih besar dari 1.
Contoh: abcabc
Substring yang mungkin dimulai dari indeks 0:
Jika kita menggantinya dengan string kosong
Karena ada substring selain 'abcabc' yang mengembalikan string kosong, string seluruhnya terbuat dari substring lain ('abc')
Cobalah online!
sumber
Python 3 ,
62605654 byte-4 bytes thanx ke ArBo
Cobalah online!
sumber
f=
dapat dijatuhkan; fungsi anonim umumnya diperbolehkan. Selain itu, dengan beralih ke Python 2 dan memeriksa keanggotaan daftar alih-alihany
konstruk, Anda bisa mendapatkan 55 byteJapt , 10 byte
Mengembalikan angka positif jika benar dan 0 jika palsu. Jika Anda ingin hasil bool, tambahkan saja
-¡
flagCobalah online!
sumber
Sekam , 6 byte
Cobalah online!
Saya merasa ini adalah satu byte lebih dari optimal, tetapi saya tidak dapat menemukan pengaturan yang membuat komposisi eksplisit
ȯ
tidak perlu.Penjelasan
sumber
€htD¹
menghindariȯ
.λ€htD¹
tetapi saya tidak menyadari bahwa lambda akan ditambahkan secara implisitMathematica 11.x, 74 bytes
di mana, sepanjang,
#
mewakili string input, danmenemukan substring dari string input yang cocok dengan pola
Pola ini memerlukan kecocokan,,
x
harus dimulai pada awal string dan harus memenuhi ketentuan bahwa (1) kecocokan bukan keseluruhan string input dan (2) jika kita mengganti kemunculan kecocokan dalam string input dengan string kosong kami mendapatkan string kosong. Akhirnya, membandingkan daftar kecocokan dengan daftar kosong,aku s
True
jika daftar kecocokan adalah kosong danFalse
jika daftar kecocokan kosong.Kasus uji:
dan
sumber
Python 3, 84 byte
Menggunakan
textwrap.wrap
(terima kasih atas jawaban ini ) untuk membagi string menjadi potongan-potongan panjangn
untuk menguji setiap kemungkinan panjang pengulangan substring. Potongan dibagi kemudian dibandingkan satu sama lain dengan menambahkannya ke set. Jika semua bagiannya sama, dan himpunannya memiliki panjang 1, maka string harus berupa string yang berulang. Saya menggunakan<2
alih-alih==1
karena menghemat byte, dan panjang string input dijamin lebih besar dari nol.Jika tidak ada
n
yang panjang substring berulangn
membentuk seluruh string, maka kembalikan false untuk seluruh fungsi.sumber
05AB1E , 5 byte
Metode xnor dari pertanyaan sebelumnya tampaknya juga optimal di 05AB1E.
Cobalah online! atau sebagai Test Suite
Penjelasan
sumber
Bersih , 73 byte
Tidak menggunakan regex.
Cobalah online!
Mendefinisikan
$ :: [Char] -> Bool
.Cek apakah string yang diberikan adalah awalan dari pengulangan sub-string yang diambil dari bagian akhir.
sumber
C ++ (gcc) , 36 byte
Cobalah online!
Port lain dari solusi xnor. Menggunakan makro untuk memperluas argumen ke ekspresi. Argumen tersebut dianggap bertipe
std::string
.sumber
Variabel QlikView, 27 byte
Ini harus didefinisikan sebagai variabel, yang kemudian memungkinkan Anda untuk melewati parameter, misalnya
$1
sebagai nilai input Anda.Ia mengembalikan
0
atau-1
(setara denganTRUE()
fungsi QlikView ).sumber
Swift, 196 byte
Cobalah online!
sumber
Ikon , 46 byte
Cobalah online!
Port lain dari solusi xnor.
sumber
K (oK) , 29 byte
Cobalah online!
sumber
Merah , 72 byte
Cobalah online!
Pengembalian
1
untukTrue
sumber
T-SQL, 47 byte
Menggunakan metode @ Xnor :
Menjaga jawaban lama karena berisi golf yang bagus (67 byte):
Penjelasan: Skrip ini berulang kali mencoba mengganti input '@y' dengan karakter '@' pertama dari input '@y' tanpa apa-apa, sambil meningkatkan '@'.
Akhirnya hasilnya akan kosong. Jika ini terjadi ketika variabel loop sama dengan panjang varchar, kriterianya salah / 0 karena '@' = len (@y) (tidak ada varchar berulang).
bisa bermain golf dalam hal ini
karena panjang '@ y' tidak boleh 0 dan '@' tidak akan pernah melebihi panjang @ y.
Cobalah online
sumber