Sederetan karakter berulang jika berisi dua substring berturut-turut yang setara.
Misalnya, 2034384538452
ulangi karena mengandung 3845
dua kali, berturut-turut.
Oleh karena itu, tantangan Anda adalah memutuskan apakah string berisi substring berulang. Anda dapat mengambil input sebagai string atau array karakter.
Anda tidak akan pernah menerima input kosong, dan panjang substring (jika ada) mungkin 1 atau lebih.
Saya menggunakan 1
dan di 0
sini sebagai nilai-nilai kebenaran dan kepalsuan saya, tetapi Anda dapat menggunakan nilai-nilai yang berbeda, selama mereka benar dan salah dalam bahasa Anda.
Contoh:
abcab -> 0
bdefdefg -> 1
Hello, World! -> 1
pp.pp/pp -> 1
q -> 0
21020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021012102012101202102012021012102012021020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020120210201210120210201202101210201210120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120 -> 0
(Contoh terakhir dihasilkan dari jumlah yang di antara setiap nol dalam urutan Thue-Morse)
Jawaban:
Retina , 6 byte
Cobalah online!
Nilai positif untuk kebenaran; nol untuk falsey.
Bagaimana itu bekerja
Mengembalikan jumlah kecocokan regex
/(.+)\1/g
.sumber
Brachylog , 3 byte
Cobalah online!
sumber
Jelly ,
65 byteIni adalah program lengkap. TIO tidak dapat menangani test case terakhir tanpa memotongnya.
Cobalah online! (test case terakhir dipotong hingga 250 digit)
Bagaimana itu bekerja
sumber
Mathematica, 32 byte
sumber
StringContainsQ[x__~~x__]
dan!StringFreeQ[#,x__~~x__]&
keduanya lebih pendek.Java, 27 byte
Cukup banyak duplikat dari jawaban Retina , tetapi tidak mungkin Java semakin pendek.
sumber
05AB1E , 5 byte
Cobalah online!
Output 1 sebagai nilai kebenaran dan 0 sebagai nilai palsu
Penjelasan
sumber
Python , 38 byte
Cobalah online!
Menguap, sebuah regex. Cek apakah string berisi string salah satu karakter lebih
.+
diikuti oleh string yang sama yang baru saja diambil. Objek pencarian output adalah Truthy jika setidaknya ada satu kecocokan, seperti yang bisa diperiksa olehbool
.Menggunakan di
compile
sini menghemat daripada menulis lambda:Python , 54 byte
Cobalah online!
Mencari substring yang terdiri dari dua atau lebih string yang sama digabungkan, sebagaimana dicentang
s in(s*2)[1:-1]
seperti dalam jawaban ini . Substring dihasilkan secara rekursif dengan memilih untuk memotong karakter pertama atau terakhir. Ini eksponensial, sehingga habis pada kasus uji besar.Hampir celaka:
Yang pertama tidak menggunakan Python
in
untuk memeriksa substring, dan bisa disesuaikan dengan bahasa lain.sumber
Pyth -
1098 byteMengembalikan daftar semua substring berulang (yang jika tidak ada, adalah daftar kosong, yang palsu)
Cobalah
Penjelasan:
sumber
f}+TTQ.:
bekerja dari 1 Byte kurang: tautanCheddar , 60 byte
Cobalah online!
sumber
@.test(/(.+)\1/)
PHP , 32 byte
Cobalah online!
PHP , 38 byte
Cobalah online!
sumber
Python 3 ,
7366 byte-7 byte terima kasih kepada @LeakyNun
Cobalah online!
sumber
f=lambda s:s and(any(s[:i]*2 in s for i in range(1,len(s)))or f(s[1:]))
lambda s:any(2*s[j:i]in s for i in range(len(s))for j in range(i))
Perl 6 , 11 byte
Menguji
Diperluas:
sumber
PHP, 32 byte
Jalankan sebagai pipa dengan
-F
. Maaf Jorg, saya tidak memperhatikan Anda telah memposting yang sama .versi non-regex,
8482 bytekeluar dengan kode pengembalian
0
untuk pengulangan, waktu habis (dan keluar dengan kesalahan) untuk tidak ada. Jalankan sebagai pipa dengan-nr
.mengasumsikan input ASCII yang dapat dicetak; menggantikan
~
dengana&
untuk ASCII.sumber
JavaScript (ES6), 19 byte
sumber
/(.+)\1/.test
?/(.+)\1/.test
adalah pengiriman lengkap./(.+)\1/.test
tidak terikat (tidak memilikithis
).f=/(.+)\1/.test;f('aa')
tidak akan bekerja, misalnya. Anda perlu/./.test.bind(/(.+)\1/)
::/(.+)\1/.test
(15 byte)Pyth, 15 byte
Cobalah!
sumber
V , 6 byte
Cobalah online!
Test Suite!
Output program
0
untuk nilai falsey, dan bilangan bulat positif untuk nilai positif.(Perhatikan bahwa ada bug kecil, jadi saya harus mendapatkan 1 byte. Sekarang setelah perbaikan bug, saya akan dapat mengganti
.«
dengan\x82
)Penjelasan
sumber
Japt, 8
+ 1=98 byteCobalah online . Output
null
untuk falsy, dan array yang berisi semua string berulang untuk kebenaran.Penjelasan
sumber
è
untuk mengembalikan jumlah kecocokan dan menjatuhkan bendera.null
, yang palsu.00
, output00
. Apakah Anda yakin ini benar di Japt?"00"
adalah.-Q
bendera "prettyprints" output sehingga Anda dapat melihat bahwa itu array yang berisi sebuah string tunggal.Cheddar, 16 byte
Ini sebuah fungsi. Cobalah online!
sumber