Districts without Domino's
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