Ini didasarkan pada tantangan saya yang dihapus sebelumnya dengan nama yang sama
pengantar
Anda ditugasi untuk menulis program yang mengembalikan nilai kebenaran atau kesalahan berdasarkan pada apakah input memiliki semua 1 tag mirip-XML yang dibuka dan ditutup dengan benar dan dalam urutan yang benar. Pertimbangkan hal berikut sebagai input:
<Apple>
Ini akan mengembalikan nilai falsey karena tag tidak ditutup dengan benar. Ini:
<Apple></Apple>
Sebaliknya mengembalikan nilai kebenaran karena ditutup dengan benar. Program juga harus memeriksa tag bersarang untuk memastikan mereka berada di posisi yang benar. Misalnya, ambil ini sebagai input:
<mango><Apple></mango></Apple>
Semua tag ditutup dengan benar, tetapi tidak dalam urutan yang benar . Program Anda harus memeriksa hierarki dan penandaan tag yang benar.
Definisi
Biarkan saya mendefinisikan beberapa hal sebelum saya masuk ke aturan dan asumsi.
Menandai
Tag gaya XML dasar. Sebagai contoh: <Apple>
. Mereka dapat memiliki paling banyak, satu ruang mengarah dan tertinggal (atau tidak valid dan palsu), jadi < Apple >
dan <Apple>
sama. Tag ini juga dapat berisi atribut seperti foo="bar"
(dengan tanda kutip diperlukan ganda, atau tidak valid lain dan falsey) , dan nama atribut hanya dapat berisi karakter alfanumerik atau _
, :
, -
, dan .
. Nama-nama atribut juga tidak memerlukan nilai atribut, dan nilai-nilai dapat berisi apa pun kecuali "
sebelum kutipan ganda penutupan. Tag penutup tidak boleh mengandung atribut, dan tag tidak boleh memiliki baris baru di dalamnya.
Nama Tag
Nama tag adalah nama tag. Misalnya, <Apple>
nama tag adalah Apple
. Nama tag dapat berisi karakter yang sama dengan nama atribut, dan peka huruf besar-kecil. Ini berarti <Apple>
adalah tidak <apple>
.
Tag Penutupan Sendiri
Tag reguler yang menutup sendiri seperti <Apple />
atau <Apple/>
(mereka sama). Ruang antara garis miring dan nama tag diizinkan.
Teks Biasa
String karakter yang dapat berisi apa saja dan tidak termasuk dalam <
dan >
.
Tag "Sederhana"
Entah tag pembuka, penutup, atau tutup sendiri.
Aturan
- Output dapat dikembalikan atau dicetak, dan input dapat diambil dengan cara apa pun yang Anda suka
- Input adalah string, yang terdiri dari tag, teks biasa, atau keduanya
Program Anda dapat berupa fungsi atau program kerja keseluruhan
Teks biasa bisa di mana saja; jika input hanya terdiri dari teks biasa, program harus mengembalikan nilai yang sebenarnya.
Pengenalan tag bersarang diperlukan untuk program ini. Jika tag bersarang di tag, tag bersarang itu harus ditutup sebelum induknya ditutup, seperti halnya XML biasa, atau nilai falsey harus dikembalikan
Asumsi
- Anda dapat mengasumsikan bahwa input akan selalu menjadi satu atau lebih tag "sederhana"
- Anda dapat berasumsi bahwa input akan selalu mengikuti format untuk tag yang ditentukan di atas
Uji Kasus
Falsey
<apple>
<apple></Apple>
<apple></mango>
<apple><mango>
<a><b></a></b>
Text<ul><li></li><ul />
<pear attr=foo></pear attr=foo>
<Ketchup flavor=spicy></Ketchup>
<Ap ple></Apple>
Sejujurnya
Text
<Apple />
<Apple></Apple>
< Apple ></ Apple>
<mango><Apple/></mango>
<mango>Text<div class="bar">More text \o/</div></mango>
<food group="fruit">Fruits:<orange :fruit-variety="clementine" /><pear _fruit.type="asian" /></food>
<example foo="abcdefghijklmnopqrstuvwxyz1234567890-/:;()$&@.,?!'" noValue>Any characters allowed! (0.0)</example>
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. Celah standar dilarang seperti biasa.
1 Catatan : Ini bukan XML asli, tetapi pseudo-XML dengan aturan berbeda untuk tantangan tersebut. Tag dan nama atribut berbeda dari spesifikasi.
sumber
< : : :><:/><: :=":=:" ::></:>< /:>
?Jawaban:
Retina ,
7674 BytesKarena saya telah melihat bahwa retina sangat bagus untuk regex golf, saya pikir saya akan mencobanya. Mengikuti logika yang sama dengan jawaban Ruby saya dan mencetak 0 atau 1.
Cobalah online!
sumber
M`
. Jika tahap akhir hanya memiliki satu bagian, mode pertandingan tersirat.Ruby (2.3.1),
103101100 BytesFungsi anonim dipanggil dengan menambahkan
.call("<Apple></Apple>")
. Mengganti tag yang cocok atau ditutup sendiri sampai tidak ada, dan kemudian mengembalikan apakah string tidak memiliki tanda kurung sudut yang tersisa.Cobalah online!
sumber
<p title="This is a \"test\"."></p>
sebagai Falsey, tetapi seharusnya tidak.