Latar Belakang
MQTT (pesan antrian Telemetry Transportasi) adalah standar ISO mempublikasikan-berlangganan berbasis protokol pesan ( Wikipedia ).
Setiap pesan memiliki topik, seperti contoh berikut:
myhome/groundfloor/livingroom/temperature
USA/California/San Francisco/Silicon Valley
5ff4a2ce-e485-40f4-826c-b1a5d81be9b6/status
Germany/Bavaria/car/2382340923453/latitude
Klien MQTT dapat berlangganan topik pesan menggunakan wildcard:
- Tingkat tunggal:
+
- Semua tingkat ke depan:
#
Misalnya, langganan myhome/groundfloor/+/temperature
akan menghasilkan hasil ini (ketidaksesuaian dalam huruf tebal ):
✅ myhome / groundfloor / ruang tamu / suhu
✅ myhome / groundfloor / dapur / suhu
❌ myhome / groundfloor / ruang tamu / kecerahan
❌ myhome / firstfloor / ruang tamu / suhu
❌ garasi / groundfloor / kulkas / suhu
Sedangkan langganan +/groundfloor/#
akan menghasilkan hasil ini:
✅ myhome / groundfloor / ruang tamu / suhu
✅ myhome / groundfloor / dapur / kecerahan
✅ garasi / groundfloor / kulkas / suhu / lebih / spesifik / bidang
❌ myhome / firstfloor / ruang tamu / suhu
❌ myhome / basement / sudut / suhu
Info lebih lanjut di sini .
Tugas
Menerapkan fungsi / program menerima dua string dan mengembalikan boolean. String pertama adalah topik pembicaraan, yang kedua adalah topik kriteria. Topik kriteria menggunakan sintaks berlangganan yang dijelaskan di atas. Fungsi ini benar ketika subjek cocok dengan kriteria.
Aturan untuk tugas ini:
- Topiknya adalah ASCII
- Tidak ada bidang kriteria di luar
#
wildcard - Wildcard tidak muncul dalam topik subjek
- Jumlah bidang subjek> = jumlah bidang kriteria
- Tidak ada bidang 0 karakter atau garis miring depan atau belakang
Uji kasus
criteria1 = "myhome / groundfloor / + / temperature"
criteria2 = "+ / 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
("garasi / groundfloor / lemari es / suhu", criteria1) => false
("myhome / groundfloor / livingroom / temperature", criteria2) => true
("myhome / groundfloor / kitchen / brightness", criteria2) => true
("garasi / groundfloor / lemari es / suhu / lebih / spesifik / bidang ", criteria2) => true
(" myhome / firstfloor / livingroom / temperature ", criteria2) => false
("myhome / basement / sudut / suhu", criteria2) => false
("musik / kei $ ha / terbaru", "+ / kei $ ha / +") => true
a/b/c
tidak akan cocok dengan kriteriaa/b
, jadi saya cenderung mengatakan Tidak .