Baru-baru ini saya mengalami masalah dengan juru bahasa TeaScript yang baru . Masalah terbesar adalah mengidentifikasi apakah string berisi karakter khusus atau tidak.
Tantangan
Karakter khusus didefinisikan sebagai karakter dengan codepoint 160 hingga 255. Anda akan diberikan input berupa string karakter dengan codepoint 0 hingga 255, paling banyak di antaranya adalah karakter khusus. Input akan terdiri dari awalan nol atau lebih karakter, string yang dikutip, dan akhiran nol atau lebih karakter. Jika ada karakter khusus dalam string yang dikutip, Anda harus menampilkan nilai yang benar, jika tidak, nilai yang salah.
Detail
- Karakter
"'
dianggap kutipan. - Di dalam string yang dikutip, garis miring terbalik
\
akan digunakan untuk keluar dari karakter berikut. Dalam awalan dan sufiks, tidak memiliki arti khusus. - Kutipan akan selalu seimbang.
- Hanya akan ada satu string yang dikutip.
Contohnya
"Hello, World¡"
true
"Hello, World"¡
false
"Hello' Wo\"rld\\"¡
false
ab"cd\"ef\\gh\i\\"£
false
\"foo¡"
true
'
string dan banyak string dalam satu kasus uji (idealnya dengan karakter Unicode di antara mereka).Jawaban:
Retina ,
1917 byteTerima kasih kepada user81655 untuk menghemat 2 byte.
Hitungan byte menggunakan ISO 8859-1.
Outputnya 0 atau 1.
Cobalah online.
Penjelasan
Karena asumsi tantangan, yang pertama
'
atau"
akan mulai hanya string input dan yang terakhir'
atau"
mengakhirinya. Kita juga tidak perlu khawatir mereka tetap sama karena mereka dijamin tetap sama.Oleh karena itu, regex hanya mencoba untuk menemukan karakter dengan titik kode 161 hingga 255, inklusif, yang didahului oleh satu kutipan dan diikuti oleh yang lain. Akan selalu ada 0 atau 1 pertandingan.
sumber
"abc"¡'
? (Saya kira tergantung pada bagaimana Anda membaca OP, kutipan tunggal telanjang itu tidak pernah dapat terjadi dalam suatu input, tetapi secara teknis hanya ada satu set kutipan dalam input ini.)(['"]).*[¡-ÿ].*\1
. Kebetulan lebih praktis.Catatan: Ini dapat dilakukan dengan ekspresi reguler sederhana.
s=>s.match`['"].*[¡-ÿ].*['"]`
29 byte dalam JavaScript, tetapi lebih asyik tanpa ekspresi reguler:JavaScript (ES6),
8482 bytePenjelasan
Pengembalian
1
untuktrue
dan0
untukfalse
. Dalam" "
kode di bawah ini adalahU+00A0 NO-BREAK SPACE
(titik kode 160).Uji
Tampilkan cuplikan kode
sumber