Фон
MQTT (Телеметрический транспорт сообщений) является стандартным протоколом обмена сообщениями на основе публикации и подписки ( Википедия ).
Каждое сообщение имеет тему, например следующие примеры:
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
выдаст следующие результаты (несоответствия, выделенные жирным шрифтом ):
✅ мой дом / первый этаж / гостиная / температура
✅ мой дом / первый этаж / кухня / температура
❌ мой дом / первый этаж / гостиная / яркость
❌ мой дом / первый этаж / гостиная / температура
❌ гараж / первый этаж / холодильник / температура
Принимая во внимание, что подписка +/groundfloor/#
дала бы эти результаты:
✅ мой дом / первый этаж / гостиная / температура
✅ мой дом / первый этаж / кухня / яркость
✅ гараж / первый этаж / холодильник / температура / более / специфический / поля
❌ мой дом / первый этаж / гостиная / температура
❌ мой дом / подвал / угол / температура
Больше информации здесь .
Задание
Реализуйте функцию / программу, принимающую две строки и возвращающую логическое значение. Первая строка - тема темы, вторая - тема критерия. В разделе критериев используется синтаксис подписки, описанный выше. Функция правдива, когда субъект соответствует критериям.
Правила для этой задачи:
- Темы ASCII
- Поля критериев, кроме
#
подстановочных знаков, отсутствуют - Подстановочные знаки не отображаются в темах
- Количество тематических полей> = количество полей критериев
- Здесь нет 0-символьных полей, ни начальных, ни хвостовых косых черт
Контрольные примеры
критерии1 = "мой дом / земляной пол / + / температура"
критерии2 = "+ / земляной пол / #"
("abc", "ab") => false
("abc", "abc") => true
("abc / de", "abc") => false
("мой дом / первый этаж / гостиная / температура", критерии1 ) => true
(«мой дом / первый этаж / кухня / температура», критерии1) => правда
(«мой дом / первый этаж / гостиная / яркость», критерии1) => false
(«мой дом / первый этаж / гостиная / температура», критерии1) = > false
("гараж / первый этаж / холодильник / температура", критерии 1) => false
("мой дом / первый этаж / гостиная / температура", критерии 2) => true
("мой дом / первый этаж / кухня / яркость", критерии 2) => правда
(»гараж / цокольный этаж / холодильник / температура / более / специфические / поля ", критерии 2) => верно
(" мой дом / первый этаж / гостиная / температура ", критерии 2) => false
("myhome / подвал / угол / температура", критерий 2) => false
("music / kei $ ha / latest", "+ / kei $ ha / +") => true
a/b/c
не соответствует критериямa/b
, поэтому я склонен сказать нет .