Hintergrund
MQTT (Message Queuing Telemetry Transport) ist ein ISO-Standard-Messaging-Protokoll auf Publish-Subscribe-Basis ( Wikipedia ).
Jede Nachricht hat ein Thema, z. B. die folgenden Beispiele:
myhome/groundfloor/livingroom/temperatureUSA/California/San Francisco/Silicon Valley5ff4a2ce-e485-40f4-826c-b1a5d81be9b6/statusGermany/Bavaria/car/2382340923453/latitude
MQTT-Clients können Nachrichtenthemen mithilfe von Platzhaltern abonnieren:
- Einstufig:
+ - Alle Ebenen ab:
#
Das Abonnement myhome/groundfloor/+/temperaturewürde beispielsweise folgende Ergebnisse liefern (Abweichungen in Fettdruck ):
✅ myhome / Erdgeschoss / Wohnzimmer / Temperatur
✅ myhome / Erdgeschoss / Küche / Temperatur
❌ myhome / Erdgeschoss / Wohnzimmer / Helligkeit
❌ myhome / erstes Stockwerk / Wohnzimmer / Temperatur
❌ Garage / Erdgeschoss / Kühlschrank / Temperatur
Während das Abonnement +/groundfloor/#diese Ergebnisse hervorbringen würde:
✅ myhome / Erdgeschoss / Wohnzimmer / Temperatur
✅ myhome / Erdgeschoss / Küche / Helligkeit
✅ Garage / Erdgeschoss / Kühlschrank / Temperatur / mehr / spezifische / Felder
❌ myhome / Firstfloor / Wohnzimmer / Temperatur
❌ myhome / Keller / Ecke / Temperatur
Mehr Infos hier .
Die Aufgabe
Implementieren Sie eine Funktion / ein Programm, die / das zwei Zeichenfolgen akzeptiert und einen Booleschen Wert zurückgibt. Die erste Zeichenfolge ist das Thema, die zweite das Kriterienthema. Das Kriterienthema verwendet die oben beschriebene Abonnementsyntax. Die Funktion ist wahr, wenn das Thema den Kriterien entspricht.
Regeln für diese Aufgabe:
- Themen sind ASCII
- Es gibt keine Kriterienfelder außerhalb des
#Platzhalters - Platzhalter werden in Themenbereichen nicht angezeigt
- Anzahl der Themenfelder> = Anzahl der Kriterienfelder
- Es gibt keine Felder mit 0 Zeichen und keine Schrägstriche
Testfälle
Kriterien1 = "myhome / Erdgeschoss / + / Temperatur"
Kriterien2 = "+ / Erdgeschoss / #"
("abc", "ab") => false
("abc", "abc") => true
("abc / de", "abc") => false
("myhome / Erdgeschoss / Wohnzimmer / Temperatur", Kriterien1 ) => wahr
("myhome / erdgeschoss / küche / temperatur", kriterien1) => wahr
("myhome / erdgeschoss / wohnzimmer / helligkeit", kriterien1) => falsch
("myhome / erster Stock / wohnzimmer / temperatur", kriterien1) = > false
("Garage / Erdgeschoss / Kühlschrank / Temperatur", Kriterien1) => false
("myhome / Erdgeschoss / Wohnzimmer / Temperatur", Kriterien2) => true
("myhome / Erdgeschoss / Küche / Helligkeit", Kriterien2) => true
("Garage / Erdgeschoss / Kühlschrank / Temperatur / mehr / spezifisch / Felder ", Kriterien2) => wahr
(" myhome / erster Stock / Wohnzimmer / Temperatur ", Kriterien2) => falsch
("myhome / Keller / Ecke / Temperatur", Kriterien2) => false
("Musik / Kei $ ha / Neueste", "+ / Kei $ ha / +") => true
a/b/cwürde nicht den Kriterien entsprechena/b, daher neige ich dazu, Nein zu sagen .