Dalam tantangan sebelumnya saya meminta pegolf kode untuk menghasilkan string yang menyalin setiap karakter dalam sebuah string. Sebagai contoh:
TThhiiss iiss ddoouubbllee ssppeeaakk!!
Tantangan ini hanya untuk mendeteksi jika beberapa teks memenuhi definisi string ucapan ganda.
- Bahkan ada sejumlah karakter.
- Ketika dipisah menjadi pasangan, setiap pasangan terdiri dari dua karakter yang sama.
Tantangan
- Ini kode golf, lakukan dalam beberapa byte.
- Gunakan bahasa apa pun yang Anda pilih.
- Harap sertakan tautan ke juru bahasa online.
- Kode akan menerima beberapa teks.
- Untuk mempermudah, input hanya akan terdiri dari karakter ASCII yang dapat dicetak
- Ini akan mengembalikan indikasi apakah input tersebut berbicara dua kali atau tidak. Bisa jadi:
- Boolean
- String ('benar', 'salah', 'ya', 'tidak' dll)
- Integer 0 atau 1
Kasus uji:
- aba - false
- abba - false
- aabb - benar
- aaabb - false
- tthhiiss - benar
- ttthhhiiisss - false
code-golf
string
decision-problem
AJFaraday
sumber
sumber
abba
yang disarankan: yang seharusnya falseyaabbbb
mana yang seharusnya benar0
yang disarankan: mana yang seharusnya falsey.Jawaban:
Python 3 , 24 byte
Cobalah online!
sumber
brainfuck , 20 byte
Disimpan 1 byte berkat Jo King.
Cobalah online!
Output yang mudah dibaca!
Mengambil input dua karakter sekaligus, dan menjauh dari 1 pada kaset jika ada pasangan yang tidak cocok. EOF diperlakukan sebagai 0 dan karenanya ditangani secara otomatis.
Output adalah byte nol jika string tidak berbicara ganda, dan 0x01 jika itu. Versi yang dapat dibaca menampilkan ini sebagai karakter dengan biaya 14 byte.
sumber
MATL , 4 byte
Input adalah string, tertutup dengan qoutes tunggal. Output adalah
0
untuk berbicara dua kali,1
jika tidak.Cobalah online!
Penjelasan
Pertimbangkan input
'TThhiiss iiss ddoouubbllee ssppeeaakk!!'
sebagai contoh.sumber
05AB1E ,
652 byteMasukan sebagai daftar karakter.
-3 byte dengan mengirim jawaban Japt @ Shaggy , jadi pastikan untuk membatalkannya!
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
Penjelasan:
sumber
Japt , 4 byte
Cobalah
Alternatif
Cobalah
sumber
Retina , 9 byte
Cobalah online.
Penjelasan:
Hapus semua pasangan karakter yang sama:
Periksa apakah tidak ada karakter yang tersisa:
sumber
^$
sebagai tahap akhir Anda.false
sebagai kebenaran dantrue
sebagai falsey (tetapi jika menyimpan satu byte dan diizinkan, saya masih akan menggunakannya). ;) Tetapi karena ini adalah solusi byte yang sama dengan mengeluarkan hasil yang diharapkan, ini lebih baik.Jelly , 3 byte
Cobalah online!
sumber
¹©s2L€=2Ạa®s2E€Ạ
...ḢƝs2E€Ạ
... tapi saya tidak bisa mendapatkan apa yang saya inginkan, dan kemudian saya melihatŒœ
lolStax , 5 byte
Jalankan dan debug itu
Prosedur:
sumber
PHP ,
5856 byteCobalah online!
Sebagai fungsi rekursif.
PHP ,
615652 byteCobalah online!
Atau program mandiri. Input string via
STDIN
, output istruthy
(1
) jika itu bunyi ganda, danfalsey
(0
) jika bukan bunyi ganda.-4 byte thx ke @ Night2 !
sumber
kode mesin x86,
97 byteMasukkan string
SI
, masukkan panjang string dalamCX
. KeluaranZF
jika berbicara dua kali lipat.Atau 14 byte sebagai PC DOS yang dapat dieksekusi:
Input melalui
STDIN
, baik pipa atau interaktif. Akan menggemakan input "dua kali lipat" sampai karakter yang tidak berlipat ganda terdeteksi, pada titik mana akan keluar (mungkin membengkokkan aturan I / O sedikit, tetapi ini hanya jawaban bonus).Bangun dan uji ISDBL2.COM menggunakan
xxd -r
:Asli 24 byte lengkap PC DOS executable:
Input dari baris perintah, output ke layar
'Y'
jika ganda,'N'
jika tidak.Bangun dan uji ISDBL.COM menggunakan
xxd -r
:Kredit:
sumber
LOOPE
alih-alihJNZ
/LOOP
untuk menyimpan 2 byte.Lua ,
676663593332 byte-25 byte terima kasih kepada Giuseppe
-1 byte terima kasih kepada val
Cobalah online!
Hapus setiap karakter yang digandakan, lalu periksa apakah hasilnya kosong.
sumber
i:gsub("(.)%1","")
dan periksa apakahi==""
?"(.)%1"
dengan sendirinya termasuk tabrakan, tetapi tidak terpikir oleh saya bahwa dengan menggantinya sekali untuk semua tangkapan sudah cukup. Haruskah saya menerapkan solusi Anda atau Anda harus menulis jawaban Anda sendiri? Dan terimakasih!arg[1]
dapat diganti dengan(...)
untuk menghemat satu byte.Perl 5 , 15 byte
Cobalah online!
Output 1 untuk berbicara dua kali, tidak ada untuk yang tidak berbicara dua kali.
sumber
MathGolf , 2 byte
Cobalah online!
Pada dasarnya sama dengan jawaban 05AB1E, pisahkan
½
string menjadi karakter genap dan ganjil, lalu periksa kesetaraannya. Pass untuk string kosong.sumber
JavaScript, 28 byte
Cobalah online!
23 byte menggunakan regex wastl
Cobalah online!
sumber
null
untuk false: Coba online!s=>!s.some((x,y)=>x>s[y|1])
>
dengan!=
Haskell ,
2823 byteCobalah online!
Sangat mudah. Bicara ganda hanya kosong atau karakter yang berulang diucapkan untuk berbicara ganda.
Kurang mudah sekarang. Keluaran melalui ada atau tidak adanya kesalahan, per meta konsensus ; tidak ada kesalahan berarti bicara dua kali. Pencocokan pola gagal ketika dua karakter pertama berbeda atau ketika ada jumlah karakter ganjil. Terima kasih kepada Laikoni untuk penghematan ini!
sumber
V (vim) , 7 byte
Cobalah online! atau Verifikasi kasus uji
Hexdump:
Hanya dua regex. Penjelasan:
sumber
Brachylog , 5 byte
Cobalah online!
Berhasil atau gagal.
sumber
PowerShell ,
3938 byteCobalah online!
di mana
$p
berisi char sebelumnya.Tanpa rekursi , tanpa regex :). Mengambil input sebagai array char melalui string splatting (lihat tautan TIO).
PowerShell , 48 byte
Cobalah online!
Tidak ada rekursi , tidak ada regex dan tidak ada pipa: D. Ini juga mengambil input sebagai array-char melalui string splatting.
$b-eq$a
Sebagai gantinya digunakan$a-eq$b
untuk kasus ketika char terakhir memiliki kode # 0.sumber
PowerShell ,
6459 byteCobalah online!
Fungsi rekursif, tidak ada regex. Mengambil input sebagai
char
-array (lihat tautan TIO). Lepaskan dua elemen pertama ke dalam$a
dan$b
, simpan sisanya ke dalam$r
. Jika kita masih memiliki elemen yang tersisa, kembalilah bersama$a -eq $b
. Kalau tidak, periksa saja apakah$a -eq $b
. Output tersirat.-5 byte berkat mazzy
sumber
$
sebelum blok pernyataan dan tidak tahu mengapa itu tidak berhasil.Julia 1.0 , 25 byte
Cobalah online!
sumber
f
, misalnya!a=...
. Atau untuk menggunakan fungsi anonim:s->...
J ,
131110 byteCobalah online!
-2 byte terima kasih kepada Adám
-1 byte berkat mil
Penjelasan TLDR: Apakah input sama dengan setiap karakter lain dari input berlipat ganda?
sumber
-:]#~2 0$~#
-:2#_2{.\]
harus menyimpan byte lainBahasa Pemrograman Shakespeare ,
204156 byte-48 byte terima kasih kepada Jo King (kebanyakan dengan mengubah metode output)
Cobalah online!
Keluar dengan kesalahan jika inputnya adalah bicara dua kali, dan dengan peringatan jika itu bukan bicara ganda (yang diizinkan secara default).
sumber
Keg ,
1917 karakterPenjelasan:
Cobalah online!
sumber
R ,
5334 byte-19 byte berkat Giuseppe
Cobalah online!
sumber
gsub("(.)\\1","",a)==""
akan melakukan trik juga; banyak lainnya menggunakan regex yang sama.function(a)!sum(rle(a)$l%%2)
untuk 28Brain-Flak ,
26, 22 byteCobalah online!
Output 1 untuk false dan 0 untuk true.
Versi yang dapat dibaca:
Saya awalnya punya ini:
Yang lebih panjang 10 byte.
sumber
({({}[{}]){{}}{}})
QuadR , 11 byte
Cobalah online!
''≡⍵
hasilnya adalah string kosong ketika(.)\1
sebuah karakter diikuti dengan sendirinyadigantikan oleh ketiadaan
sumber
JavaScript,
2623 byteCobalah online!
Solusi Rekursif, 30 byte
Terima kasih kepada Arnauld untuk perbaikan dengan biaya 0 byte.
Cobalah online!
sumber
Merah , 36 byte
Cobalah online!
Alternatif yang lebih panjang:
Merah , 40 byte
Cobalah online!
sumber
Zsh , 36 byte
Keluar dari kebenaran (0) jika TIDAK berbicara dua kali, dan falsy (1) jika berbicara dua kali. (Sebagaimana diizinkan dalam komentar.)
Cobalah online!
sumber
Prolog (SWI) ,
6045 byteterima kasih kepada Unrelated String
Cobalah online!
Mengubahnya dari string ke daftar jenis atom merusak skor, tapi yah ..
sumber
atom_chars
alih-alihstring_chars
, meskipun Anda mengambil string sebagai input, dan bukan atom. Tapi itu mungkin tidak relevan jika Anda dapat mengambil string dibatasi-backtick - yaitu, daftar kode char.