バックグラウンド
MQTT(メッセージキューテレメトリトランスポート)は、ISO標準のパブリッシュサブスクライブベースのメッセージングプロトコル(Wikipedia)です。
各メッセージには、次の例のようなトピックがあります。
myhome/groundfloor/livingroom/temperature
USA/California/San Francisco/Silicon Valley
5ff4a2ce-e485-40f4-826c-b1a5d81be9b6/status
Germany/Bavaria/car/2382340923453/latitude
MQTTクライアントは、ワイルドカードを使用してメッセージトピックをサブスクライブできます。
- シングルレベル:
+
- 以降のすべてのレベル:
#
たとえば、サブスクリプションmyhome/groundfloor/+/temperature
は次の結果を生成します(太字の不適合):
✅MYHOME /地上階/リビング/温度
✅MYHOME /地上階/キッチン/温度
❌MYHOME /地上階/リビング/ 輝度
❌MYHOME / firstfloor /リビング/温度
❌ ガレージ /地上階/ 冷蔵庫 /気温
サブスクリプション+/groundfloor/#
がこれらの結果を生成するのに対し、
✅myhome / groundfloor / livingroom / temperature✅myhome
/ groundfloor / kitchen / brightness✅garage
/ groundfloor / fridge / temperature / more / specific /
fields❌myhome / firstfloor / livingroom / temperature❌myhome
/ basement / corner /気温
詳細はこちら。
タスク
2つの文字列を受け入れ、ブール値を返す関数/プログラムを実装します。最初の文字列はサブジェクトトピックで、2番目の文字列は基準トピックです。基準トピックでは、上記のサブスクリプション構文を使用します。サブジェクトが基準に一致する場合、関数は真実です。
このタスクのルール:
- トピックはASCIIです
#
ワイルドカード以外の基準フィールドはありません- ワイルドカードは件名のトピックに表示されません
- 件名フィールドの数> =基準フィールドの数
- 0文字のフィールドも、スラッシュの先頭または末尾にもありません。
テストケース
条件1 = "myhome / groundfloor / + / temperature"
条件2 = "+ / groundfloor /#"
( "abc"、 "ab")=> false
( "abc"、 "abc")=> true
( "abc / de"、 "abc")=> false
( "myhome / groundfloor / livingroom / temperature"、criteria1 )=> true
( "myhome / groundfloor / kitchen / temperature"、criteria1)=> true
( "myhome / groundfloor / livingroom / brightness"、criteria1)=> false
( "myhome / firstfloor / livingroom / temperature"、criteria1)= > false
( "ガレージ/グラウンドフロア/冷蔵庫/温度"、基準1)=> false
( "マイホーム/グラウンドフロア/リビングルーム/温度"、基準2)=> true
( "マイホーム/グラウンドフロア/キッチン/明るさ"、基準2)=> true
(「ガレージ/グラウンドフロア/冷蔵庫/温度/詳細/特定/フィールド "、基準2)=> true
(" myhome / firstfloor / livingroom / temperature "、基準2)=> false
( "myhome / basement / corner / temperature"、criteria2)=> false
( "music / kei $ ha / latest"、 "+ / kei $ ha / +")=> true
a/b/c
は条件a/b
に一致しないため、「いいえ」と言う傾向があります。