今日のタスクは、文字列を受け入れ、4つの整数を出力(または返す)するプログラム(または関数)を記述することです。
入力
入力文字列はCSS3セレクターであり、基本的に任意のUnicode文字を含めることができます。
出力
出力は、このセレクターのCSS固有性を表します。
最初の数値は常に0です(インラインスタイルに使用されるため、この演習はインラインスタイルには適用されません)。
2番目の数値は
#foo
、セレクターに存在するID()の数です。3番目の数値は、セレクターに存在するクラス(
.foo
)、属性([bar]
)、および疑似クラスの数です。4番目の数値は、セレクターに存在する要素(
biz
)と疑似要素の数です。
ノート:
ユニバーサルセレクター(*)はどこにもカウントされません
疑似要素で
::before
あり::after
、単一の ":"(レガシー表記)で記述することもできます入力は
:not(selector)
疑似クラスを使用できます。内部のセレクターは、ID、クラス、要素などが含まれていてもカウントされません)セレクタの「レンガ」はコンビネータで区切られた(スペース/タブである
+
、>
、~
、例:body > div+a ~*
)、彼らはまた、(EXを:累積することができますdiv#foo.bar[baz]:hover::before
)また、CSSエスケープシーケンス(
\
1〜6桁の16進数、スペースが続く)、およびエスケープされた特殊文字(\
これらのいずれかが続く!"#$%&'()*+,-./:;<=>?@[\]^`{|}~
)も適切に処理する必要があります。これらのエスケープは、セレクター(id、クラスなど)の任意のブリックの一部にすることができます。無効なセレクターまたはCSS4セレクターを受け取った場合は、特に何もする必要はありません。CSS3セレクターバリデーターを実装する気にしないでください。
CSSの詳細については、次のリンクをご覧ください。
- CSS-tricksの記事:http : //css-tricks.com/specifics-on-css-specificity/
- それを数えるツール(不完全):http : //specificity.keegan.st/
例
//ユニバーサル * => 0,0,0,0 // ID #id => 0,1,0,0 //クラス .class => 0,0,1,0 //属性 [foo] => 0,0,1,0 [foo = "bar"] => 0,0,1,0 [foo〜= "bar"] => 0,0,1,0 [foo ^ = "bar"] => 0,0,1,0 [foo $ = "bar"] => 0,0,1,0 [foo * = "bar"] => 0,0,1,0 [foo | = "bar"] => 0,0,1,0 [foo = bar] => 0,0,1,0 [foo = 'bar'] => 0,0,1,0 (注:角かっこ[]には、エスケープされていない "]"以外のものを含めることができます) //疑似クラス :root => 0,0,1,0 :nth-child(n)=> 0,0,1,0 :nth-last-child(n)=> 0,0,1,0 :nth-of-type(n)=> 0,0,1,0 :nth-last-of-type(n)=> 0,0,1,0 :first-child => 0,0,1,0 :last-child => 0,0,1,0 :first-of-type => 0,0,1,0 :last-of-type => 0,0,1,0 :only-child => 0,0,1,0 :only-of-type => 0,0,1,0 :空=> 0,0,1,0 :link => 0,0,1,0 :visited => 0,0,1,0 :active => 0,0,1,0 :hover => 0,0,1,0 :focus => 0,0,1,0 :target => 0,0,1,0 :lang(fr)=> 0,0,1,0 :enabled => 0,0,1,0 :disabled => 0,0,1,0 :チェック済み=> 0,0,1,0 :not(selector)=> 0,0,1,0 (注: ":"の後のキーワードは、疑似要素以外のものにすることができます) //要素 本文=> 0,0,0,1 //疑似要素 :before => 0,0,0,1 :after => 0,0,0,1 ::前=> 0,0,0,1 ::後=> 0,0,0,1 :: first-line => 0,0,0,1 ::最初の文字=> 0,0,0,1 (注:括弧()には、エスケープされていない ")"以外のものを含めることができます)
(つづく)
質問がある場合や例やテストデータが必要な場合は、コメント欄で質問してください。
最短コード(バイト単位)が優先されます。
幸運を!
1
素晴らしいでしょう。(ところで、これは実際にはかなり良い課題だと思いますが、テストケースの完全なリストは、それを適切に機能させるために不可欠であると思われます。)