Bu, aynı ada sahip daha önce silinmiş bir meydan okumamı temel alıyor
Giriş
Girişin XML benzeri 1 etiketlerinin tümü uygun şekilde açılmış ve kapatılmış ve doğru sırada olup olmadığına bağlı olarak doğruluk veya falsey değeri döndüren bir program yazmakla görevlendirilirsiniz . Girdi olarak aşağıdakileri düşünün:
<Apple>
Etiket doğru şekilde kapatılmadığından, bu durum bir falsey değeri döndürür. Bu:
<Apple></Apple>
Aksine doğru bir şekilde kapatıldığından doğruluk değeri döndürür. Program ayrıca doğru konumda olduklarından emin olmak için iç içe etiketleri de kontrol etmelidir. Örneğin, bunu giriş olarak alın:
<mango><Apple></mango></Apple>
Tüm etiketler doğru bir şekilde kapatılmış, ancak doğru sırada değil . Programınız doğru etiket hiyerarşisini ve iç içe yerleştirmeyi kontrol etmelidir.
Tanımlar
Kurallara ve varsayımlara girmeden önce birkaç şey tanımlayayım.
Etiket
Temel bir XML tarzı etiket. Örneğin: <Apple>
. Onlar çok, lider ve uzay sondaki (aksi takdirde geçersiz ve Falsey var), en fazla birine sahip olabilir < Apple >
ve <Apple>
aynıdır. Bu etiketler gibi özelliklerini içerebilir foo="bar"
(gerekli çift tırnak, ya da başka geçersiz ve Falsey ile) ve öznitelik adı sadece herhangi bir alfasayısal karakter veya içerebilir _
, :
, -
, ve .
. Özellik adları da bir özellik değeri gerektirmez ve değerler "
kapanış çift tırnak işareti dışında herhangi bir şey içerebilir . Kapanış etiketi nitelik içermemeli ve hiçbir etiketin içinde yeni satır olmamalıdır.
Etiket adı
Etiket adları etiketlerin adlarıdır. Örneğin, <Apple>
etiket adı Apple
. Etiket adları, özellik adlarıyla aynı karakterleri içerebilir ve büyük / küçük harf duyarlıdır. Bu araç <Apple>
olduğunu değil <apple>
.
Kendiliğinden Kapanan Etiket
Kendini <Apple />
veya gibi kapatan normal bir etiket <Apple/>
(aynıdır). / Ve etiket adı arasındaki boşluğa izin verilir.
Düz Metin
Şey içerebilir ve içine alınmasa karakter dize <
ve >
.
"Basit" Etiket
Bir açılış, kapanış veya kendi kendine kapanan etiket.
kurallar
- Çıktı iade edilebilir veya yazdırılabilir ve girdi istediğiniz şekilde alınabilir
- Girdi, etiketler, düz metin veya her ikisinden oluşan bir dizedir
Programınız bir işlev veya tüm çalışan bir program olabilir
Düz metin herhangi bir yerde olabilir; giriş yalnızca düz metin içeriyorsa, program doğruluk değeri döndürmelidir.
Program için iç içe etiketlerin tanınması gerekir. Bir etiket bir etikete iç içe yerleştirilmişse, iç içe geçmiş etiketin tıpkı normal XML gibi üst öğe kapatılmadan önce kapatılması gerekir, aksi takdirde bir falsey değeri döndürülmelidir
Varsayımlar
- Girişin her zaman bir veya daha fazla "basit" etiket olacağını varsayabilirsiniz.
- Girişin her zaman yukarıda tanımlanan etiketlerin biçimini izleyeceğini varsayabilirsiniz.
Test Durumları
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>
Doğru
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>
puanlama
Bu kod golfüdür , bu nedenle bayttaki en kısa kod kazanır. Standart boşluklar her zamanki gibi yasaktır.
1 Not : Bu gerçek XML değil, meydan okuma için farklı kurallara sahip bir sahte XML'dir. Etiket ve özellik adları spesifikasyondan farklıdır.
< : : :><:/><: :=":=:" ::></:>< /:>
?