import re
mapping = {
0 : [ 127 , 136 , 145 , 190 , 235 , 280 , 370 , 389 , 460 , 479 , 569 , 578 , 118 , 226 , 244 , 299 , 334 , 488 , 668 , 677 , 0 , 550 ] ,
1 : [ 128 , 137 , 146 , 236 , 245 , 290 , 380 , 470 , 489 , 560 , 678 , 579 , 119 , 155 , 227 , 335 , 344 , 399 , 588 , 669 , 100 , 777 ] ,
2 : [ 129 , 138 , 147 , 156 , 237 , 246 , 345 , 390 , 480 , 570 , 679 , 589 , 110 , 228 , 255 , 336 , 499 , 660 , 688 , 778 , 200 , 444 ] ,
3 : [ 120 , 139 , 148 , 157 , 238 , 247 , 256 , 346 , 490 , 580 , 670 , 689 , 166 , 229 , 337 , 355 , 445 , 599 , 779 , 788 , 300 , 111 ] ,
4 : [ 130 , 149 , 158 , 167 , 239 , 248 , 257 , 347 , 356 , 590 , 680 , 789 , 112 , 220 , 266 , 338 , 446 , 455 , 699 , 770 , 400 , 888 ] ,
5 : [ 140 , 159 , 168 , 230 , 249 , 258 , 267 , 348 , 357 , 456 , 690 , 780 , 113 , 122 , 177 , 339 , 366 , 447 , 799 , 770 , 500 , 555 ] ,
6 : [ 123 , 150 , 169 , 178 , 240 , 259 , 268 , 349 , 358 , 457 , 367 , 790 , 114 , 277 , 330 , 448 , 466 , 556 , 880 , 899 , 600 , 222 ] ,
7 : [ 124 , 160 , 179 , 250 , 269 , 278 , 340 , 359 , 368 , 458 , 467 , 890 , 115 , 133 , 188 , 223 , 377 , 449 , 557 , 566 , 700 , 999 ] ,
8 : [ 125 , 134 , 170 , 189 , 260 , 279 , 350 , 369 , 378 , 459 , 567 , 468 , 116 , 224 , 233 , 288 , 440 , 477 , 558 , 990 , 800 , 666 ] ,
9 : [ 126 , 135 , 180 , 234 , 270 , 289 , 360 , 379 , 450 , 469 , 117 , 478 , 568 , 144 , 199 , 225 , 388 , 559 , 577 , 667 , 900 , 333 ] ,
}
def check_mapping( val, mapping) :
for group, vals in mapping.items ( ) :
if val in vals:
return group
return None
messages = [
"560-1X490-3" ,
"238-3X458-7" ,
"490-aaaaa-a" ,
]
for msg in messages:
nums = list ( map ( int , re .findall ( r'\d +' , msg) ) )
print ( f"Message: {msg}" )
for n in nums:
group = check_mapping( n, mapping)
print ( f" {n} -> group {group}" )
aW1wb3J0IHJlCgptYXBwaW5nID0gewogICAgMDogWzEyNywxMzYsMTQ1LDE5MCwyMzUsMjgwLDM3MCwzODksNDYwLDQ3OSw1NjksNTc4LDExOCwyMjYsMjQ0LDI5OSwzMzQsNDg4LDY2OCw2NzcsMCw1NTBdLAogICAgMTogWzEyOCwxMzcsMTQ2LDIzNiwyNDUsMjkwLDM4MCw0NzAsNDg5LDU2MCw2NzgsNTc5LDExOSwxNTUsMjI3LDMzNSwzNDQsMzk5LDU4OCw2NjksMTAwLDc3N10sCiAgICAyOiBbMTI5LDEzOCwxNDcsMTU2LDIzNywyNDYsMzQ1LDM5MCw0ODAsNTcwLDY3OSw1ODksMTEwLDIyOCwyNTUsMzM2LDQ5OSw2NjAsNjg4LDc3OCwyMDAsNDQ0XSwKICAgIDM6IFsxMjAsMTM5LDE0OCwxNTcsMjM4LDI0NywyNTYsMzQ2LDQ5MCw1ODAsNjcwLDY4OSwxNjYsMjI5LDMzNywzNTUsNDQ1LDU5OSw3NzksNzg4LDMwMCwxMTFdLAogICAgNDogWzEzMCwxNDksMTU4LDE2NywyMzksMjQ4LDI1NywzNDcsMzU2LDU5MCw2ODAsNzg5LDExMiwyMjAsMjY2LDMzOCw0NDYsNDU1LDY5OSw3NzAsNDAwLDg4OF0sCiAgICA1OiBbMTQwLDE1OSwxNjgsMjMwLDI0OSwyNTgsMjY3LDM0OCwzNTcsNDU2LDY5MCw3ODAsMTEzLDEyMiwxNzcsMzM5LDM2Niw0NDcsNzk5LDc3MCw1MDAsNTU1XSwKICAgIDY6IFsxMjMsMTUwLDE2OSwxNzgsMjQwLDI1OSwyNjgsMzQ5LDM1OCw0NTcsMzY3LDc5MCwxMTQsMjc3LDMzMCw0NDgsNDY2LDU1Niw4ODAsODk5LDYwMCwyMjJdLAogICAgNzogWzEyNCwxNjAsMTc5LDI1MCwyNjksMjc4LDM0MCwzNTksMzY4LDQ1OCw0NjcsODkwLDExNSwxMzMsMTg4LDIyMywzNzcsNDQ5LDU1Nyw1NjYsNzAwLDk5OV0sCiAgICA4OiBbMTI1LDEzNCwxNzAsMTg5LDI2MCwyNzksMzUwLDM2OSwzNzgsNDU5LDU2Nyw0NjgsMTE2LDIyNCwyMzMsMjg4LDQ0MCw0NzcsNTU4LDk5MCw4MDAsNjY2XSwKICAgIDk6IFsxMjYsMTM1LDE4MCwyMzQsMjcwLDI4OSwzNjAsMzc5LDQ1MCw0NjksMTE3LDQ3OCw1NjgsMTQ0LDE5OSwyMjUsMzg4LDU1OSw1NzcsNjY3LDkwMCwzMzNdLAp9CgpkZWYgY2hlY2tfbWFwcGluZyh2YWwsIG1hcHBpbmcpOgogICAgZm9yIGdyb3VwLCB2YWxzIGluIG1hcHBpbmcuaXRlbXMoKToKICAgICAgICBpZiB2YWwgaW4gdmFsczoKICAgICAgICAgICAgcmV0dXJuIGdyb3VwCiAgICByZXR1cm4gTm9uZQoKbWVzc2FnZXMgPSBbCiAgICAiNTYwLTFYNDkwLTMiLAogICAgIjIzOC0zWDQ1OC03IiwKICAgICI0OTAtYWFhYWEtYSIsCl0KCmZvciBtc2cgaW4gbWVzc2FnZXM6CiAgICBudW1zID0gbGlzdChtYXAoaW50LCByZS5maW5kYWxsKHInXGQrJywgbXNnKSkpCiAgICBwcmludChmIk1lc3NhZ2U6IHttc2d9IikKICAgIGZvciBuIGluIG51bXM6CiAgICAgICAgZ3JvdXAgPSBjaGVja19tYXBwaW5nKG4sIG1hcHBpbmcpCiAgICAgICAgcHJpbnQoZiIgIHtufSAtPiBncm91cCB7Z3JvdXB9Iik=