これは、以前に削除された同じ名前の私のチャレンジに基づいています
前書き
入力にXMLのような1タグがすべて適切に開閉され、正しい順序であるかどうかに基づいて、真偽値を返すプログラムを作成する必要があります。入力として次のことを考慮してください。
<Apple>
タグが正しく閉じられていないため、これは偽の値を返します。この:
<Apple></Apple>
反対に、正しく閉じられているため、真理値を返します。また、ネストされたタグをチェックして、正しい位置にあることを確認する必要があります。たとえば、これを入力として使用します。
<mango><Apple></mango></Apple>
すべてのタグは正しく閉じられていますが、正しい順序ではありません。プログラムは、正しいタグ階層とネストをチェックする必要があります。
定義
ルールと仮定に入る前に、いくつかのことを定義しましょう。
鬼ごっこ
基本的なXMLスタイルのタグ。例:<Apple>
。彼らは(あるいはそうでなければ無効とfalseyだ)、最大で1つの先頭と末尾のスペースを持っているので、できる< Apple >
と<Apple>
同じです。これらのタグは、などの属性も含めることができますfoo="bar"
(必要な二重引用符、または他の無効とfalsey付き)を、および属性名は任意の英数字またはを含むことができ_
、:
、-
、と.
。属性名には属性値も必要ありません。また、値には、"
二重引用符を閉じる前以外の値を含めることができます。終了タグには属性を含めることはできません。また、タグに改行を含めることはできません。
タグ名
タグ名はタグの名前です。たとえば、<Apple>
のタグ名はApple
です。タグ名には、属性名と同じ文字を含めることができ、大文字と小文字が区別されます。これはそうで<Apple>
はありません <apple>
。
自己閉鎖タグ
<Apple />
または<Apple/>
(同じです)など、自分自身を閉じる通常のタグ。スラッシュとタグ名の間のスペースは許可されます。
プレーンテキスト
何でも含むことができ、<
andで囲まれていない文字列>
。
「シンプル」タグ
開始タグ、終了タグ、または自己終了タグのいずれか。
ルール
- 出力は返されるか印刷される場合があり、入力は任意の方法で取得できます
- 入力は、タグ、プレーンテキスト、またはその両方で構成される文字列です
あなたのプログラムは、機能または作業プログラム全体にすることができます
プレーンテキストはどこでもかまいません。入力がプレーンテキストのみで構成されている場合、プログラムは真実の値を返す必要があります。
プログラムにはネストされたタグの認識が必要です。タグがタグ内にネストされている場合、通常のXMLと同様に、ネストされたタグを閉じてから親を閉じる必要があります。そうしないと、falsey値が返されます。
仮定
- 入力は常に1つ以上の「単純な」タグであると想定できます。
- 入力は常に上記で定義されたタグの形式に従うと想定できます。
テストケース
偽り
<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>
真実の
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>
得点
これはcode-golfであるため、バイト単位の最短コードが優先されます。通常の標準的な抜け穴は禁止されています。
1 注:これは実際のXMLではなく、チャレンジのさまざまなルールを持つ擬似XMLです。タグ名と属性名は仕様と異なります。
< : : :><:/><: :=":=:" ::></:>< /:>
?