99 Varieties of Dosa

Python 2, 503 496 487 485 479 476 bytes

for l in[a+'86'[i<2:1+i%2][::2*('v'in a)-1]+b for i in(0,1,2,3)for a,b in[l.split('~')for l in('~11~'[i<2::2]+'0|Spring ~Vegetable |73~|13~|03~|:3~|Mixed 3~|~7|~27|~17|;4~|;42~|;45~|~Tomato 1|~21|~Chutney |2'+'45~|~20|~:0|~0|Jain ~|Pav Bhaji ~|5~|59~|'[i<3:]+'<~~<'[i%2::2]).split('|')]]+['682:0','69','698']:
 for i in range(13):l=l.replace(chr(48+i),'Masala Onion Schezwan Uttappam Corn Mushroom Paneer Sada Cheese Chilli Mysore Sweet Kerala'.split()[i]+' ')
 print l+'Dosa'

Try it online!

Every dosa is of the form a [Paneer, Cheese] b Dosa

Each dosa is then encoded in a list of tuples of (a,b). There are many dosa where a or b is empty.

For each of these tuples, every combination of Paneerand Cheese is added in between them.

  • .. '86'[i<2:1+i%2] .. for i in(0,1,2,3) ..

The few special cases which are slightly different are:

  • Kerala Dosa, Kerala Cheese Dosa vs Paneer Kerala Dosa, Paneer Cheese Kerala Dosa
    • Kerala is moved from a to b if we have Paneer
    • .. '<~~<'[i%2::2] .. which gives ['Kerala',''] or ['','Kerala']
  • Schezwan Corn Mushroom Paneer Cheese Dosa
    • Corn is inserted if we have Paneer Cheese
    • .. '4..'[i<3:] ..
  • Onion Masala Dosa, Onion Paneer Masala Dosa vs Cheese Onion Masala Dosa, Paneer Cheese Onion Masala Dosa
    • Onion is moved from a to b if we have Cheese
    • .. '~11~'[i<2::2] .., similar to Kerala above
  • Pav Bhaji Cheese Paneer Dosa
    • Paneer and Cheese are swapped if a is Pav Bhaji
    • .. '86'[i<2:1+i%2][::2*('v'in a)-1] ..
  • Paneer Cheese Schezwan Mysore Masala,Paneer Chilli,Paneer Chilli Cheese
    • These are too different to account for, and are just added to the list at the end.
    • .. +['682:0','69','698']

At the end, the numbers are replaced with the correct words:

0123456789:;< -> Masala Onion Schezwan Uttappam Corn Mushroom Paneer Sada Cheese Chilli Mysore Sweet Kerala


Retina 0.8.2, 339 bytes


19¶149¶169¶1Chutney ¶1Tomato 6¶146¶Jain 1¶13¶163¶143¶183¶/-483¶;0¶/0;¶Pav Bhaji 1¶Spring 1Vegetable ¶71¶741¶751¶51¶450¶45/¶4Corn 5/-¶/:0¶5:1¶92¶62¶32¶82¶Mixed 2
%(`$
Dosa
2
Uttappam 1
1
0$'¶$`/0
0
$%'¶$%`-
/63
6/3
i /-
i -/
/
Paneer 
-
Cheese 
;
Kerala 
:
Chilli 
9
Sada 
8
Mysore 
7
Sweet Corn 
6
Onion 
5
Mushroom 
4
Schezwan 
3
Masala 

Try it online! This was 299 bytes before I discovered the edge cases...


Python 2, 436 bytes

00000000: 2363 6f64 696e 673a 3433 370a 696d 706f  #coding:437.impo
00000010: 7274 207a 6c69 620a 7072 696e 7420 7a6c  rt zlib.print zl
00000020: 6962 2e64 6563 6f6d 7072 6573 7328 2278  ib.decompress("x
00000030: da8d 554b 72c3 200c ddf7 14be 9a92 6862  ..UKr. .......hb
00000040: 52db 780c 499a 9ebe ed04 1309 3d91 eeec  R.x.I.......=...
00000050: f705 e1c1 894e 349c 62a2 8fe3 c89c 7848  .....N4.b.....xH
00000060: 1558 6961 de2c 6084 e917 f9be d35c 22a0  .Xia.,`......\".
00000070: 5d63 993d d565 7c6b 5c42 0425 2d5c 5c72  ]c.=.e|k\B.%-\\r
00000080: 1cd8 311d c76b 5ef8 a182 1556 ed08 b3f2  ..1..k^....V....
00000090: 1c67 cab1 d4c8 504b 9414 9770 8d75 44b6  .g....PK...p.uD.
000000a0: 0551 ede4 dd26 a4b8 5090 4f45 f902 4a82  .Q...&..P.OE..J.
000000b0: 01a4 70a6 4493 3e3b 0915 0780 80f8 b934  ..p.D.>;.......4
000000c0: 8b80 1075 e27e bae5 eb1c 401a e4da 09fb  ...u.~....@.....
000000d0: 6550 323f 52dc f04c 2cb3 cfc4 f5fc 57f0  eP2?R..L,.....W.
000000e0: 5a8a 557e f2d6 3ecb 032d 4152 a5b3 3573  Z.U~..>..-AR..5s
000000f0: 1b0e 235d 42fb aa13 7754 7e50 462b c9b4  ..#]B...wT~PF+..
00000100: 6e61 390f 373e 73a6 c3c4 5c6e 2d42 4c96  na9.7>s...\n-BL.
00000110: b0ae d3d1 dc99 f370 8cdb 62de e56e 04ac  .......p..b..n..
00000120: 566c 60c7 548f c625 9cd8 cabf 0bee f7cf  Vl`.T..%........
00000130: d734 6e31 ce3e e1f4 57fe 5d30 ba25 5429  .4n1.>..W.]0.%T)
00000140: 4c82 f5bd ccd7 37ae 7764 60b5 1fc3 c2c8  L.....7.wd`.....
00000150: b71b aa50 98a6 8020 b835 296f c19e 018e  ...P... .5)o....
00000160: 4473 6a1b 7f7f c06b ceb4 ae34 23c8 17ab  Dsj....k...4#...
00000170: 5921 465a 9fb7 ab2e 6ab0 8e5c 5661 5c6e  Y!FZ....j..\Va\n
00000180: fc67 7459 0bf6 0c6a 8698 53f6 e7c5 d9f4  .gtY...j..S.....
00000190: 3560 cfa0 fa30 a7ec e18b 4f6d 9dc6 3a72  5`...0....Om..:r
000001a0: 5506 2961 fe01 a6fe babb 2229 2e74 6974  U.)a......").tit
000001b0: 6c65 2829                                le()

Decompresses the string sada dosa\ncheese sada dosa\n…\n, and prints the result in title case.

Here is a Bash script that creates the program, prints its size and hexdump, and runs it.