posted on Wed, Jan 24 '24 under tag: foss

Which districts of India do not have a Domino’s Pizza Store in it?

Recently a friend told Swathi that those who are studying a district (for their public health project) should study a district which doesn’t have Domino’s pizza (as a proxy for being a difficult district). This made me wonder whether there are any such districts. I had to find out the answer.

I did what everyone should do and searched for things like “districts in which Domino’s are there”, etc. But not many useful results came up.

Then I went to Domino’s websites store locator. They were having latitude and longitude in the HTML. So, if I could get all the store links and get all the latitudes and longitudes, I should be able to get somewhere.

I had recently submitted a sitemap of SOCHARA archives to Google and I knew the trouble I went to to get all the links be listed. So, I thought Domino’s most likely is having a sitemap with all the links. I went to https://www.dominos.co.in/sitemap.xml and navigated down to https://www.dominos.co.in/store-locations/sitemap.xml which seemed like the sitemap of all the stores.

After having downloaded that I started writing a script to process this.

Caching downloads

I wanted to cache downloads in the filesystem. This allows me to quickly debug the html. First I thought I would use base32 based on a stackoverflow answer on a way to be filename safe while still being able to recover the URL from the filename. But this caused ENAMETOOLONG with a URL that’s too long. So I gave up the idea of having reversible hash and went with sha1 hash.

Here’s how my cache looks like

const getPath = (key) => {
    const hash = getHash(key);
    return `downloads/${hash}`;
}

const putCache = (key, data) => {
    const path = getPath(key)
    fs.writeFileSync(`${path}.key`, key)
    return fs.writeFileSync(path, data);
}

const getCache = (key) => {
    try {
        const path = getPath(key);
        return fs.readFileSync(path, 'utf-8');
    } catch {
        return undefined
    }
}

Queue management

The thing with scraping large number of weblinks is that we always need a queue to prevent maximum concurrent downloads. But the thing with queue libraries is that they always come with a learning curve because of their API being very convoluted. So I attempted to write a queue management system on my own. And it looks like this:

const queue = (urls, processor, done) => {
    const concurrency = 2;
    let currentJobsCount = 0;
    let jobs = urls;
    const start = () => {
        if (currentJobsCount >= concurrency) return;
        const job = jobs.shift();
        if (job === undefined) return;
        currentJobsCount++;
        processor(job).then((res) => {
            currentJobsCount--;
            if (jobs.length > 0) return start();
            if (currentJobsCount === 0) done();
        });
        start();
    }
    start();
}

If anything throws an error anywhere this will likely blow up.

XML parsing

For xml parsing, I usually use cheerio, but here I just wanted to do simple things. So to read the sitemap xml I did this:

const storeXML = fs.readFileSync('sitemap_store.xml', 'utf-8');
xml2js.parseString(storeXML, storeReader)

and to get the latitude and longitude instead of doing xml parsing or regex, I did a split:

const latLng = t.split("var position = new google.maps.LatLng(")[1].split(')')[0];    

Converting to GeoJSON

I wrote a simple function to make geojson out of this.

const convertToGeojson = (points) => {
    const skeleton = {
        "type": "FeatureCollection",
        "features": [
        ]
    }
    points.forEach(({ latLng, url }) => {
        const split = latLng.split(', ');
        const long = parseFloat(split[1]);
        const lat = parseFloat(split[0]);
        skeleton.features.push({
            "type": "Feature",
            "geometry": { "type": "Point", "coordinates": [long, lat] },
            "properties": { url },
        })
    });
    return skeleton;
}

Sanity check

For a quick sanity check, I loaded these points into QGIS and this is how it looked:

base64 embedded image courtesy base64.pictures

So most points are within India, with some being outside. I manually verified those points and found them wrong in the original data itself. So, not much to do there. There are at least 10 points which couldn’t be mapped to any district.

Also, there are some pages which return server error on downloads. Not much to do there either.

Districts

I used a random district map from geohacker. To match this to points I asked bard to generate a function which I modified slightly to this:



function matchPointsToPolygons(pointsGeoJSON, polygonsGeoJSON) {
    // Check for valid input
    if (!pointsGeoJSON || !polygonsGeoJSON || !pointsGeoJSON.features || !polygonsGeoJSON.features) {
        throw new Error("Invalid GeoJSON input");
    }

    // Convert features to turf FeatureCollections
    const pointsCollection = turf.featureCollection(pointsGeoJSON.features);
    const polygonsCollection = turf.featureCollection(polygonsGeoJSON.features);

    // Initialize an empty map for point counts
    const pointCountsMap = {};
    let unmatched = 0;

    // Match each point to a polygon by iterating through points
    for (const point of pointsCollection.features) {
        let matchingPolygon;

        // Find the first polygon containing the point using turf.within
        matchingPolygon = polygonsCollection.features.find((polygon) => turf.booleanPointInPolygon(point, polygon));

        // Add point count to corresponding polygon in the map
        if (matchingPolygon) {
            if (!pointCountsMap[matchingPolygon.properties['ID_2']]) {
                pointCountsMap[matchingPolygon.properties['ID_2']] = 0;
            }
            pointCountsMap[matchingPolygon.properties['ID_2']]++;
        } else {
            unmatched += 1;
        }
    }

    console.error(`Total unmatched stores: ${unmatched}`);
    // Return the map with point counts per polygon
    return pointCountsMap;
}

To get it to a proper table, I did some more massaging


const findAnswer = (pointsGeoJSON, polygonsGeoJSON) => {
    const map = matchPointsToPolygons(pointsGeoJSON, polygonsGeoJSON);
    const districts = [];
    const polygonsCollection = turf.featureCollection(polygonsGeoJSON.features);
    polygonsCollection.features.forEach(p => {
        const id = p?.properties?.['ID_2'];
        if (!id) return;
        districts.push({
            sno: 0,
            name: p?.properties?.['NAME_2'],
            state: p?.properties?.['NAME_1'],
            count: map[id] ?? 0,
        })
    })
    districts.sort((a, b) => a.count - b.count);
    for (let i = 0; i < districts.length; i++) {
        districts[i]["sno"] = i + 1;
    }
    return districts;
}

And all of these run out of this function


const storeReader = (err, result) => {
    const urls = result['urlset']['url'].map(u => u['loc'][0])
    queue(urls,
        async (url) => {
            console.log(`Getting ${url}`);
            const cached = getCache(url);
            if (cached) return process(url, cached);
            return fetch(url).then((res) => {
                return res.text().then((t) => {
                    putCache(url, t);
                    return process(url, t);
                })
            })
        }, () => {
            const geojson = convertToGeojson(data);
            // fs.writeFileSync('data.geojson', JSON.stringify(geojson, null, 2));
            const districts = JSON.parse(fs.readFileSync('districts.geojson', 'utf-8'));
            const answer = findAnswer(geojson, districts);
            fs.writeFileSync('answer.json', JSON.stringify(answer, null, 2));
        });
}

The answer

So, I took the answer.json and converted it to a markdown table with this tool. And the result is this:

sno name state count
1 Andaman Islands Andaman and Nicobar 0
2 Nicobar Islands Andaman and Nicobar 0
3 Adilabad Andhra Pradesh 0
4 Anantapur Andhra Pradesh 0
5 Khammam Andhra Pradesh 0
6 Mahbubnagar Andhra Pradesh 0
7 Nizamabad Andhra Pradesh 0
8 Srikakulam Andhra Pradesh 0
9 West Godavari Andhra Pradesh 0
10 Changlang Arunachal Pradesh 0
11 East Kameng Arunachal Pradesh 0
12 East Siang Arunachal Pradesh 0
13 Kurung Kumey Arunachal Pradesh 0
14 Lohit Arunachal Pradesh 0
15 Lower Dibang Valley Arunachal Pradesh 0
16 Lower Subansiri Arunachal Pradesh 0
17 Tawang Arunachal Pradesh 0
18 Tirap Arunachal Pradesh 0
19 Upper Dibang Valley Arunachal Pradesh 0
20 Upper Siang Arunachal Pradesh 0
21 Upper Subansiri Arunachal Pradesh 0
22 West Kameng Arunachal Pradesh 0
23 West Siang Arunachal Pradesh 0
24 Barpeta Assam 0
25 Bongaigaon Assam 0
26 Darrang Assam 0
27 Dhemaji Assam 0
28 Dhuburi Assam 0
29 Goalpara Assam 0
30 Golaghat Assam 0
31 Hailakandi Assam 0
32 Karbi Anglong Assam 0
33 Karimganj Assam 0
34 Lakhimpur Assam 0
35 Marigaon Assam 0
36 North Cachar Hills Assam 0
37 Araria Bihar 0
38 Bhabua Bihar 0
39 Buxar Bihar 0
40 Jamui Bihar 0
41 Jehanabad Bihar 0
42 Katihar Bihar 0
43 Khagaria Bihar 0
44 Kishanganj Bihar 0
45 Lakhisarai Bihar 0
46 Madhepura Bihar 0
47 Madhubani Bihar 0
48 Munger Bihar 0
49 Nalanda Bihar 0
50 Nawada Bihar 0
51 Rohtas Bihar 0
52 Saharsa Bihar 0
53 Samastipur Bihar 0
54 Sheikhpura Bihar 0
55 Sheohar Bihar 0
56 Sitamarhi Bihar 0
57 Siwan Bihar 0
58 Supaul Bihar 0
59 Bastar Chhattisgarh 0
60 Dantewada Chhattisgarh 0
61 Dhamtari Chhattisgarh 0
62 Janjgir-Champa Chhattisgarh 0
63 Jashpur Chhattisgarh 0
64 Kanker Chhattisgarh 0
65 Kawardha Chhattisgarh 0
66 Koriya Chhattisgarh 0
67 Mahasamund Chhattisgarh 0
68 Raigarh Chhattisgarh 0
69 Raj Nandgaon Chhattisgarh 0
70 Surguja Chhattisgarh 0
71 Dadra and Nagar Haveli Dadra and Nagar Haveli 0
72 Junagadh Daman and Diu 0
73 Amreli Gujarat 0
74 Dahod Gujarat 0
75 Narmada Gujarat 0
76 Patan Gujarat 0
77 Porbandar Gujarat 0
78 Sabar Kantha Gujarat 0
79 The Dangs Gujarat 0
80 Jind Haryana 0
81 Mahendragarh Haryana 0
82 Chamba Himachal Pradesh 0
83 Kinnaur Himachal Pradesh 0
84 Lahul and Spiti Himachal Pradesh 0
85 Anantnag (Kashmir South) Jammu and Kashmir 0
86 Bagdam Jammu and Kashmir 0
87 Baramula (Kashmir North) Jammu and Kashmir 0
88 Doda Jammu and Kashmir 0
89 Kargil Jammu and Kashmir 0
90 Kathua Jammu and Kashmir 0
91 Kupwara (Muzaffarabad) Jammu and Kashmir 0
92 Ladakh (Leh) Jammu and Kashmir 0
93 Pulwama Jammu and Kashmir 0
94 Punch Jammu and Kashmir 0
95 Rajauri Jammu and Kashmir 0
96 Srinagar Jammu and Kashmir 0
97 Udhampur Jammu and Kashmir 0
98 Chatra Jharkhand 0
99 Dumka Jharkhand 0
100 Garhwa Jharkhand 0
101 Giridih Jharkhand 0
102 Gumla Jharkhand 0
103 Jamtara Jharkhand 0
104 Koderma Jharkhand 0
105 Latehar Jharkhand 0
106 Lohardaga Jharkhand 0
107 Pakur Jharkhand 0
108 Pashchim Singhbhum Jharkhand 0
109 Sahibganj Jharkhand 0
110 Simdega Jharkhand 0
111 Bagalkot Karnataka 0
112 Bidar Karnataka 0
113 Chamrajnagar Karnataka 0
114 Gadag Karnataka 0
115 Hassan Karnataka 0
116 Koppal Karnataka 0
117 Uttar Kannand Karnataka 0
118 Kannur Kerala 0
119 Kasaragod Kerala 0
120 Malappuram Kerala 0
121 Wayanad Kerala 0
122 Kavaratti Lakshadweep 0
123 Anuppur Madhya Pradesh 0
124 Ashoknagar Madhya Pradesh 0
125 Balaghat Madhya Pradesh 0
126 Barwani Madhya Pradesh 0
127 Betul Madhya Pradesh 0
128 Bhind Madhya Pradesh 0
129 Burhanpur Madhya Pradesh 0
130 Chhatarpur Madhya Pradesh 0
131 Damoh Madhya Pradesh 0
132 Datia Madhya Pradesh 0
133 Dhar Madhya Pradesh 0
134 Dindori Madhya Pradesh 0
135 Harda Madhya Pradesh 0
136 Hoshangabad Madhya Pradesh 0
137 Jhabua Madhya Pradesh 0
138 Mandla Madhya Pradesh 0
139 Mandsaur Madhya Pradesh 0
140 Morena Madhya Pradesh 0
141 Narsinghpur Madhya Pradesh 0
142 Panna Madhya Pradesh 0
143 Raisen Madhya Pradesh 0
144 Rajgarh Madhya Pradesh 0
145 Sehore Madhya Pradesh 0
146 Seoni Madhya Pradesh 0
147 Shahdol Madhya Pradesh 0
148 Shajapur Madhya Pradesh 0
149 Sheopur Madhya Pradesh 0
150 Shivpuri Madhya Pradesh 0
151 Sidhi Madhya Pradesh 0
152 Tikamgarh Madhya Pradesh 0
153 Umaria Madhya Pradesh 0
154 Vidisha Madhya Pradesh 0
155 West Nimar Madhya Pradesh 0
156 Bhandara Maharashtra 0
157 Buldana Maharashtra 0
158 Garhchiroli Maharashtra 0
159 Hingoli Maharashtra 0
160 Jalna Maharashtra 0
161 Nandurbar Maharashtra 0
162 Osmanabad Maharashtra 0
163 Parbhani Maharashtra 0
164 Sindhudurg Maharashtra 0
165 Washim Maharashtra 0
166 Bishnupur Manipur 0
167 Chandel Manipur 0
168 Churachandpur Manipur 0
169 East Imphal Manipur 0
170 Senapati Manipur 0
171 Tamenglong Manipur 0
172 Thoubal Manipur 0
173 Ukhrul Manipur 0
174 East Garo Hills Meghalaya 0
175 Jaintia Hills Meghalaya 0
176 Ri-Bhoi Meghalaya 0
177 South Garo Hills Meghalaya 0
178 West Garo Hills Meghalaya 0
179 West Khasi Hills Meghalaya 0
180 Aizawl Mizoram 0
181 Champhai Mizoram 0
182 Kolasib Mizoram 0
183 Lawngtlai Mizoram 0
184 Lunglei Mizoram 0
185 Mamit Mizoram 0
186 Saiha Mizoram 0
187 Serchhip Mizoram 0
188 Kohima Nagaland 0
189 Mokokchung Nagaland 0
190 Mon Nagaland 0
191 Phek Nagaland 0
192 Tuensang Nagaland 0
193 Wokha Nagaland 0
194 Zunheboto Nagaland 0
195 Angul Orissa 0
196 Baragarh Orissa 0
197 Bhadrak Orissa 0
198 Bolangir Orissa 0
199 Boudh Orissa 0
200 Deogarh Orissa 0
201 Dhenkanal Orissa 0
202 Gajapati Orissa 0
203 Ganjam Orissa 0
204 Jagatsinghpur Orissa 0
205 Jajpur Orissa 0
206 Kalahandi Orissa 0
207 Kandhamal Orissa 0
208 Kendrapara Orissa 0
209 Keonjhar Orissa 0
210 Koraput Orissa 0
211 Malkangiri Orissa 0
212 Mayurbhanj Orissa 0
213 Nabarangpur Orissa 0
214 Nayagarh Orissa 0
215 Nuapada Orissa 0
216 Puri Orissa 0
217 Rayagada Orissa 0
218 Sonepur Orissa 0
219 Sundargarh Orissa 0
220 Karaikal Puducherry 0
221 Mahe Puducherry 0
222 Puducherry Puducherry 0
223 Yanam Puducherry 0
224 Mansa Punjab 0
225 Banswara Rajasthan 0
226 Baran Rajasthan 0
227 Barmer Rajasthan 0
228 Bharatpur Rajasthan 0
229 Bundi Rajasthan 0
230 Churu Rajasthan 0
231 Dausa Rajasthan 0
232 Dhaulpur Rajasthan 0
233 Dungarpur Rajasthan 0
234 Jaisalmer Rajasthan 0
235 Jalor Rajasthan 0
236 Jhalawar Rajasthan 0
237 Jhunjhunun Rajasthan 0
238 Karauli Rajasthan 0
239 Nagaur Rajasthan 0
240 Rajsamand Rajasthan 0
241 Sawai Madhopur Rajasthan 0
242 Tonk Rajasthan 0
243 North Sikkim Sikkim 0
244 South Sikkim Sikkim 0
245 West Sikkim Sikkim 0
246 Ariyalur Tamil Nadu 0
247 Cuddalore Tamil Nadu 0
248 Karur Tamil Nadu 0
249 Nagapattinam Tamil Nadu 0
250 Namakkal Tamil Nadu 0
251 Perambalur Tamil Nadu 0
252 Pudukkottai Tamil Nadu 0
253 Ramanathapuram Tamil Nadu 0
254 Sivaganga Tamil Nadu 0
255 Theni Tamil Nadu 0
256 Thiruvarur Tamil Nadu 0
257 Thoothukudi Tamil Nadu 0
258 Tiruvannamalai Tamil Nadu 0
259 Villupuram Tamil Nadu 0
260 Virudhunagar Tamil Nadu 0
261 Dhalai Tripura 0
262 North Tripura Tripura 0
263 South Tripura Tripura 0
264 Allahabad Uttar Pradesh 0
265 Ambedkar Nagar Uttar Pradesh 0
266 Auraiya Uttar Pradesh 0
267 Azamgarh Uttar Pradesh 0
268 Badaun Uttar Pradesh 0
269 Baghpat Uttar Pradesh 0
270 Bahraich Uttar Pradesh 0
271 Ballia Uttar Pradesh 0
272 Balrampur Uttar Pradesh 0
273 Banda Uttar Pradesh 0
274 Basti Uttar Pradesh 0
275 Chitrakoot Uttar Pradesh 0
276 Deoria Uttar Pradesh 0
277 Etah Uttar Pradesh 0
278 Etawah Uttar Pradesh 0
279 Faizabad Uttar Pradesh 0
280 Farrukhabad Uttar Pradesh 0
281 Fatehpur Uttar Pradesh 0
282 Firozabad Uttar Pradesh 0
283 Ghazipur Uttar Pradesh 0
284 Gonda Uttar Pradesh 0
285 Hamirpur Uttar Pradesh 0
286 Hardoi Uttar Pradesh 0
287 Hathras Uttar Pradesh 0
288 Jalaun Uttar Pradesh 0
289 Jaunpur Uttar Pradesh 0
290 Kannauj Uttar Pradesh 0
291 Kanpur Dehat Uttar Pradesh 0
292 Kushinagar Uttar Pradesh 0
293 Lalitpur Uttar Pradesh 0
294 Maharajganj Uttar Pradesh 0
295 Mahoba Uttar Pradesh 0
296 Mainpuri Uttar Pradesh 0
297 Mau Uttar Pradesh 0
298 Mirzapur Uttar Pradesh 0
299 Pilibhit Uttar Pradesh 0
300 Pratapgarh Uttar Pradesh 0
301 Rampur Uttar Pradesh 0
302 Sant Kabir Nagar Uttar Pradesh 0
303 Sant Ravi Das Nagar Uttar Pradesh 0
304 Shravasti Uttar Pradesh 0
305 Siddharth Nagar Uttar Pradesh 0
306 Sonbhadra Uttar Pradesh 0
307 Sultanpur Uttar Pradesh 0
308 Bageshwar Uttaranchal 0
309 Chamoli Uttaranchal 0
310 Champawat Uttaranchal 0
311 Pithoragarh Uttaranchal 0
312 Rudra Prayag Uttaranchal 0
313 Tehri Garhwal Uttaranchal 0
314 Uttarkashi Uttaranchal 0
315 Bankura West Bengal 0
316 Dakshin Dinajpur West Bengal 0
317 Kochbihar West Bengal 0
318 Maldah West Bengal 0
319 Puruliya West Bengal 0
320 Uttar Dinajpur West Bengal 0
321 Cuddapah Andhra Pradesh 1
322 Karimnagar Andhra Pradesh 1
323 Kurnool Andhra Pradesh 1
324 Nalgonda Andhra Pradesh 1
325 Prakasam Andhra Pradesh 1
326 Vizianagaram Andhra Pradesh 1
327 Warangal Andhra Pradesh 1
328 Papum Pare Arunachal Pradesh 1
329 Kokrajhar Assam 1
330 Nagaon Assam 1
331 Nalbari Assam 1
332 Sibsagar Assam 1
333 Tinsukia Assam 1
334 Aurangabad Bihar 1
335 Banka Bihar 1
336 Begusarai Bihar 1
337 Bhojpur Bihar 1
338 Darbhanga Bihar 1
339 Gopalganj Bihar 1
340 Pashchim Champaran Bihar 1
341 Purba Champaran Bihar 1
342 Saran Bihar 1
343 Vaishali Bihar 1
344 Durg Chhattisgarh 1
345 Korba Chhattisgarh 1
346 Daman Daman and Diu 1
347 Bhavnagar Gujarat 1
348 Junagadh Gujarat 1
349 Kheda Gujarat 1
350 Panch Mahals Gujarat 1
351 Fatehabad Haryana 1
352 Kaithal Haryana 1
353 Kurukshetra Haryana 1
354 Panipat Haryana 1
355 Rewari Haryana 1
356 Sirsa Haryana 1
357 Bilaspur Himachal Pradesh 1
358 Hamirpur Himachal Pradesh 1
359 Kullu Himachal Pradesh 1
360 Mandi Himachal Pradesh 1
361 Shimla Himachal Pradesh 1
362 Sirmaur Himachal Pradesh 1
363 Una Himachal Pradesh 1
364 Deoghar Jharkhand 1
365 Godda Jharkhand 1
366 Hazaribag Jharkhand 1
367 Palamu Jharkhand 1
368 Saraikela Kharsawan Jharkhand 1
369 Bellary Karnataka 1
370 Chikmagalur Karnataka 1
371 Chitradurga Karnataka 1
372 Haveri Karnataka 1
373 Kolar Karnataka 1
374 Mandya Karnataka 1
375 Raichur Karnataka 1
376 Shimoga Karnataka 1
377 Alappuzha Kerala 1
378 Idukki Kerala 1
379 Kollam Kerala 1
380 Kottayam Kerala 1
381 Palakkad Kerala 1
382 Pattanamtitta Kerala 1
383 Dewas Madhya Pradesh 1
384 East Nimar Madhya Pradesh 1
385 Guna Madhya Pradesh 1
386 Katni Madhya Pradesh 1
387 Neemuch Madhya Pradesh 1
388 Ratlam Madhya Pradesh 1
389 Rewa Madhya Pradesh 1
390 Sagar Madhya Pradesh 1
391 Satna Madhya Pradesh 1
392 Akola Maharashtra 1
393 Amravati Maharashtra 1
394 Bid Maharashtra 1
395 Chandrapur Maharashtra 1
396 Dhule Maharashtra 1
397 Latur Maharashtra 1
398 Wardha Maharashtra 1
399 Yavatmal Maharashtra 1
400 Baleshwar Orissa 1
401 Jharsuguda Orissa 1
402 Sambalpur Orissa 1
403 Faridkot Punjab 1
404 Fatehgarh Sahib Punjab 1
405 Moga Punjab 1
406 Muktsar Punjab 1
407 Nawan Shehar Punjab 1
408 Bhilwara Rajasthan 1
409 Bikaner Rajasthan 1
410 Chittaurgarh Rajasthan 1
411 Ganganagar Rajasthan 1
412 Hanumangarh Rajasthan 1
413 Pali Rajasthan 1
414 Sikar Rajasthan 1
415 Sirohi Rajasthan 1
416 Erode Tamil Nadu 1
417 Kanniyakumari Tamil Nadu 1
418 Nilgiris Tamil Nadu 1
419 Salem Tamil Nadu 1
420 Thanjavur Tamil Nadu 1
421 Tirunelveli Kattabo Tamil Nadu 1
422 Bara Banki Uttar Pradesh 1
423 Bijnor Uttar Pradesh 1
424 Bulandshahr Uttar Pradesh 1
425 Chandauli Uttar Pradesh 1
426 Jyotiba Phule Nagar Uttar Pradesh 1
427 Lakhimpur Kheri Uttar Pradesh 1
428 Rae Bareli Uttar Pradesh 1
429 Saharanpur Uttar Pradesh 1
430 Shahjahanpur Uttar Pradesh 1
431 Sitapur Uttar Pradesh 1
432 Unnao Uttar Pradesh 1
433 Almora Uttaranchal 1
434 Pauri Garhwal Uttaranchal 1
435 Birbhum West Bengal 1
436 East Midnapore West Bengal 1
437 Murshidabad West Bengal 1
438 Nadia West Bengal 1
439 Medak Andhra Pradesh 2
440 Cachar Assam 2
441 Dibrugarh Assam 2
442 Jorhat Assam 2
443 Bhagalpur Bihar 2
444 Purnia Bihar 2
445 Bilaspur Chhattisgarh 2
446 Anand Gujarat 2
447 Banas Kantha Gujarat 2
448 Bharuch Gujarat 2
449 Jamnagar Gujarat 2
450 Mahesana Gujarat 2
451 Navsari Gujarat 2
452 Surendranagar Gujarat 2
453 Bhiwani Haryana 2
454 Hisar Haryana 2
455 Jhajjar Haryana 2
456 Rohtak Haryana 2
457 Yamuna Nagar Haryana 2
458 Bokaro Jharkhand 2
459 Belgaum Karnataka 2
460 Bijapur Karnataka 2
461 Kodagu Karnataka 2
462 Chhindwara Madhya Pradesh 2
463 Ujjain Madhya Pradesh 2
464 Gondiya Maharashtra 2
465 Nanded Maharashtra 2
466 Ratnagiri Maharashtra 2
467 Solapur Maharashtra 2
468 West Imphal Manipur 2
469 East Khasi Hills Meghalaya 2
470 Dimapur Nagaland 2
471 Cuttack Orissa 2
472 Firozpur Punjab 2
473 Sangrur Punjab 2
474 Ajmer Rajasthan 2
475 Jodhpur Rajasthan 2
476 Udaipur Rajasthan 2
477 Dharmapuri Tamil Nadu 2
478 Dindigul Tamil Nadu 2
479 West Tripura Tripura 2
480 Aligarh Uttar Pradesh 2
481 Jhansi Uttar Pradesh 2
482 Mathura Uttar Pradesh 2
483 Moradabad Uttar Pradesh 2
484 Muzaffarnagar Uttar Pradesh 2
485 Udham Singh Nagar Uttaranchal 2
486 Chittoor Andhra Pradesh 3
487 Guntur Andhra Pradesh 3
488 Nellore Andhra Pradesh 3
489 Sonitpur Assam 3
490 Gaya Bihar 3
491 Muzaffarpur Bihar 3
492 Raipur Chhattisgarh 3
493 Kachchh Gujarat 3
494 Ambala Haryana 3
495 Sonepat Haryana 3
496 Kangra Himachal Pradesh 3
497 Solan Himachal Pradesh 3
498 Davanagere Karnataka 3
499 Gulbarga Karnataka 3
500 Tumkur Karnataka 3
501 Udupi Karnataka 3
502 Kozhikode Kerala 3
503 Thrissur Kerala 3
504 Jabalpur Madhya Pradesh 3
505 Ahmednagar Maharashtra 3
506 Jalgaon Maharashtra 3
507 Sangli Maharashtra 3
508 Satara Maharashtra 3
509 Bathinda Punjab 3
510 Gurdaspur Punjab 3
511 Hoshiarpur Punjab 3
512 Kapurthala Punjab 3
513 Alwar Rajasthan 3
514 Kota Rajasthan 3
515 East Sikkim 3
516 Madurai Tamil Nadu 3
517 Tiruchchirappalli Tamil Nadu 3
518 Vellore Tamil Nadu 3
519 Haridwar Uttaranchal 3
520 West Midnapore West Bengal 3
521 East Godavari Andhra Pradesh 4
522 Valsad Gujarat 4
523 Karnal Haryana 4
524 Dhanbad Jharkhand 4
525 Kolhapur Maharashtra 4
526 Gorakhpur Uttar Pradesh 4
527 Kaushambi Uttar Pradesh 4
528 Varanasi Uttar Pradesh 4
529 Naini Tal Uttaranchal 4
530 Krishna Andhra Pradesh 5
531 Rajkot Gujarat 5
532 Gwalior Madhya Pradesh 5
533 Bareilly Uttar Pradesh 5
534 Meerut Uttar Pradesh 5
535 Panchkula Haryana 6
536 Bangalore Rural Karnataka 6
537 Dharwad Karnataka 6
538 Thiruvananthapuram Kerala 6
539 Khordha Orissa 6
540 Agra Uttar Pradesh 6
541 Barddhaman West Bengal 6
542 Darjiling West Bengal 6
543 Haora West Bengal 6
544 Hugli West Bengal 6
545 Jalpaiguri West Bengal 6
546 Gandhinagar Gujarat 7
547 Jammu Jammu and Kashmir 7
548 Purba Singhbhum Jharkhand 7
549 Aurangabad Maharashtra 7
550 Jalandhar Punjab 7
551 Vishakhapatnam Andhra Pradesh 8
552 North Goa Goa 8
553 South Goa Goa 8
554 Chandigarh Chandigarh 9
555 Ranchi Jharkhand 9
556 Dakshin Kannad Karnataka 9
557 Nashik Maharashtra 9
558 Mysore Karnataka 10
559 Amritsar Punjab 10
560 Ludhiana Punjab 10
561 Bhopal Madhya Pradesh 11
562 Kanpur Uttar Pradesh 11
563 Dehra Dun Uttaranchal 11
564 Raigarh Maharashtra 12
565 Rupnagar Punjab 12
566 Coimbatore Tamil Nadu 12
567 Vadodara Gujarat 13
568 Ernakulam Kerala 13
569 Ghaziabad Uttar Pradesh 13
570 Kamrup Assam 14
571 Faridabad Haryana 14
572 Nagpur Maharashtra 14
573 Thiruvallur Tamil Nadu 15
574 South 24 Parganas West Bengal 15
575 Indore Madhya Pradesh 16
576 Kolkata West Bengal 16
577 Patna Bihar 17
578 Patiala Punjab 17
579 Jaipur Rajasthan 18
580 Surat Gujarat 20
581 Hyderabad Andhra Pradesh 21
582 North 24 Parganas West Bengal 24
583 Kancheepuram Tamil Nadu 26
584 Lucknow Uttar Pradesh 26
585 Thane Maharashtra 27
586 Ahmadabad Gujarat 29
587 Chennai Tamil Nadu 34
588 Gurgaon Haryana 39
589 Rangareddi Andhra Pradesh 48
590 Gautam Buddha Nagar Uttar Pradesh 51
591 Pune Maharashtra 77
592 Delhi Delhi 117
593 Greater Bombay Maharashtra 122
594 Bangalore Urban Karnataka 165

You can get the whole script here

Like what you are reading? Subscribe (by RSS, email, mastodon, or telegram)!