fundo
MQTT (Message Queuing Telemetry Transport) é um baseada-subscribe publicar protocolo de mensagens padrão ISO ( Wikipedia ).
Cada mensagem tem um tópico, como os seguintes exemplos:
myhome/groundfloor/livingroom/temperature
USA/California/San Francisco/Silicon Valley
5ff4a2ce-e485-40f4-826c-b1a5d81be9b6/status
Germany/Bavaria/car/2382340923453/latitude
Os clientes MQTT podem assinar tópicos de mensagens usando curingas:
- Nível único:
+
- Todos os níveis em diante:
#
Por exemplo, a assinatura myhome/groundfloor/+/temperature
produziria estes resultados (não conformidades em negrito ):
✅ myhome / térreo / sala / temperatura
✅ myhome / térreo / cozinha / temperatura
❌ myhome / térreo / sala / brilho
❌ myhome / firstfloor / sala / temperatura
❌ garagem / térreo / frigorífico / temperatura
Considerando que a assinatura +/groundfloor/#
produziria estes resultados:
✅ myhome / térreo / sala / temperatura
✅ myhome / térreo / cozinha / brilho
✅ garagem / térreo / geladeira / temperatura / mais / específico / campos
❌ myhome / primeiro andar / sala / temperatura /
❌ myhome / porão / canto / temperatura
Mais informações aqui .
A tarefa
Implemente uma função / programa aceitando duas strings e retornando um booleano. A primeira string é o tópico do assunto, a segunda é o tópico do critério. O tópico de critérios usa a sintaxe de assinatura detalhada acima. A função é verdadeira quando o assunto corresponde aos critérios.
Regras para esta tarefa:
- Os tópicos são ASCII
- Não há campos de critérios além do
#
curinga - Os curingas não aparecem nos tópicos do assunto
- Número de campos de assunto> = número de campos de critérios
- Não há campos com 0 caracteres nem barras iniciais ou finais
Casos de teste
critérios1 = "myhome / piso térreo / + / temperatura"
critérios2 = "+ / piso térreo / #"
("abc", "ab") => false
("abc", "abc") => true
("abc / de", "abc") => false
("myhome / groundfloor / livingroom / temperature", critérios1 ) => true
("myhome / piso térreo / cozinha / temperatura", critério1) => true
("myhome / piso térreo / sala de estar / brilho", critério1) => false
("myhome / piso térreo / sala de estar / temperatura", critério1) = > false
("garagem / piso térreo / geladeira / temperatura", critério1) => false
("casa / piso térreo / sala / temperatura", critério2) => true
("casa / piso térreo / cozinha / brilho", critério2) => true
("garagem / térreo / geladeira / temperatura / mais / específico / campos ", critérios2) => verdadeiro
(" myhome / primeiro andar / sala / temperatura ", critérios2) => falso
("myhome / porão / canto / temperatura", critérios2) => falso
("música / kei $ ha / mais recente", "+ / kei $ ha / +") => verdadeiro
a/b/c
não corresponderia aos critériosa/b
, por isso estou inclinado a dizer não .