Antecedentes
MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería basado en publicación, suscripción y estándar ISO ( Wikipedia ).
Cada mensaje tiene un tema, como los siguientes ejemplos:
myhome/groundfloor/livingroom/temperature
USA/California/San Francisco/Silicon Valley
5ff4a2ce-e485-40f4-826c-b1a5d81be9b6/status
Germany/Bavaria/car/2382340923453/latitude
Los clientes MQTT pueden suscribirse a los temas de mensajes utilizando comodines:
- Nivel único:
+
- Todos los niveles en adelante:
#
Por ejemplo, la suscripción myhome/groundfloor/+/temperature
produciría estos resultados (no conformidades en negrita ):
✅ myhome / planta baja / sala de estar / temperatura
✅ myhome / planta baja / cocina / temperatura
❌ myhome / planta baja / sala de estar / brillo
❌ myhome / primer piso / sala de estar / temperatura
❌ garaje / planta baja / refrigerador / temperatura
Mientras que la suscripción +/groundfloor/#
produciría estos resultados:
✅ myhome / planta baja / sala de estar / temperatura
✅ myhome / planta baja / cocina / brillo
✅ garaje / planta baja / refrigerador / temperatura / más / específico / campos
❌ myhome / primer piso / sala de estar / temperatura
❌ myhome / sótano / esquina / temperatura
Más información aquí .
La tarea
Implemente una función / programa que acepte dos cadenas y devuelva un valor booleano. La primera cadena es el tema del tema, la segunda es el tema del criterio. El tema de criterios utiliza la sintaxis de suscripción detallada anteriormente. La función es verdadera cuando el sujeto coincide con los criterios.
Reglas para esta tarea:
- Los temas son ASCII
- No hay campos de criterios más allá del
#
comodín - Los comodines no aparecen en los temas
- Número de campos de asunto> = número de campos de criterios
- No hay campos de 0 caracteres ni barras inclinadas hacia adelante o hacia atrás
Casos de prueba
criterios1 = "mi casa / planta baja / + / temperatura"
criterios2 = "+ / planta baja / #"
("abc", "ab") => falso
("abc", "abc") => verdadero
("abc / de", "abc") => falso
("mi casa / planta baja / sala de estar / temperatura", criterio1 ) => verdadero
("mi casa / planta baja / cocina / temperatura", criterio1) => verdadero
("mi casa / planta baja / sala de estar / brillo", criterio1) => falso
("mi casa / primer piso / sala de estar / temperatura", criterio1) = > falso
("garaje / planta baja / refrigerador / temperatura", criterio1) => falso
("mi casa / planta baja / sala de estar / temperatura", criterio2) => verdadero
("mi casa / planta baja / cocina / brillo", criterio2) => verdadero
("garaje / planta baja / refrigerador / temperatura / más / específico / campos ", criterio2) => verdadero
(" mi casa / primer piso / sala de estar / temperatura ", criterio2) => falso
("myhome / sótano / esquina / temperatura", criterio2) => falso
("music / kei $ ha / latest", "+ / kei $ ha / +") => true
a/b/c
no coincidía con los criteriosa/b
, por lo que me inclino a decir que no .