Copy wrd = [["Ward Name", "Area (sqkm)","Road Length (kms)","Lake Area (sqm)",
"Park Area (sqm)","Playground Area (sqm)","Bus Stops",
"Persons per sqkm","Decadal Population growth rate (%)"],
["Thanisandndra",10,235,444273,80829.49,1847,42,7,161,252.20],
["Byatarayanapura",10,144,308438,115449.12,19031,59,7,198,129.80],
["Kodigehalli",3.8,84,545611,166993.94,25810,16,12,369,119.80],
["Radhakrishna Temple Ward",1.9,54,80474,74683.61,9799,18,18,014,36.30],
["Sanjaya Nagar",1.5,44,0,37718.13,9231,9,21,096,34.40],
["Ganga Nagar",2.3,31,0,9386.52,15535,23,12,096,4.20],
["Hebbala",1.2,36,0,13100.59,13277,10,26,455,34.60],
["Vishwanath Nagenahalli",1.5,51,0,0,10540,8,34,772,100.80],
["Nagavara",2.1,65,0,0,0,14,29,205,71.50],
["Kaval Bairasandra",1.6,50,0,7208.17,3664,17,24,771,48.20],
["Manorayana Palya",0.8,33,0,2710.87,1996,5,59,123,37.80]];
mxWlkInt = 0.4;
mxBusInt = 0.6;
l = List.RestOfItems(wrd);
wrdArTtl = List.GetItemAtIndex(l<1>,1);
wrdArLak = List.GetItemAtIndex(l<1>,3);
wrdArPrk = List.GetItemAtIndex(l<1>,4);
wrdArPly = List.GetItemAtIndex(l<1>,5);
wrdRdLgt = List.GetItemAtIndex(l<1>,2);
wrdBsStp = List.GetItemAtIndex(l<1>,6);
wrdPlnDn = List.GetItemAtIndex(l<1>,7);
wrdPlnGw = List.GetItemAtIndex(l<1>,8);
//Ward Rectangles
wrdArEff = wrdArTtl-((wrdArLak + wrdArPrk + wrdArPly)*Math.Pow(10,-6));
wrdRctLg = (wrdBsStp/2)*mxBusInt;
wrdRctWd = wrdArEff/wrdRctLg;
//Required Stop/Station count
wrdRqStn = Math.Ceiling(wrdRdLgt/(mxWlkInt*2))-wrdBsStp;
//Unconnected Area
wrdOutWd = wrdRctWd>mxWlkInt?wrdRctWd-mxWlkInt:0;
wrdOutAr = wrdOutWd * wrdRctLg;
plDn2021 = (wrdPlnDn+(wrdPlnDn*wrdPlnGw/100));
wrdOutPn = Math.Ceiling(wrdOutAr * plDn2021);
wrdOutRd = wrdOutWd/wrdRctWd*wrdRdLgt;
//Required Stop/Station count
wrdOutSt = Math.Ceiling(wrdOutRd/(mxWlkInt*2));
//Population per station
stnOutPn = wrdOutPn==0?0:Math.Ceiling(wrdOutPn/wrdOutSt);
barStPt = Point.ByCoordinates(0,List.AddItemToFront(0,List.DropItems(Math.Sum(List.TakeItems(wrdRctWd+1,1..List.Count(wrdRctWd))),-1)));
barBsLn = Line.ByStartPointDirectionLength(barStPt,Vector.XAxis(),wrdRctLg);
barTpLn = barBsLn.Translate(Vector.YAxis(),wrdRctWd);
barBsPt = barBsLn.PointAtParameter(0..1..#Math.Ceiling(wrdRdLgt/wrdRctWd));
barInnWd = wrdRctWd<=0.4?wrdRctWd:0.4;
barOutWd = wrdRctWd>mxWlkInt?wrdRctWd-mxWlkInt:0;
barInnRd = Line.ByStartPointDirectionLength(barBsPt,Vector.YAxis(),barInnWd).Extrude(Vector.ZAxis(),wrdPlnDn/10000);
barOutRd = Line.ByStartPointDirectionLength(barBsPt.Translate(Vector.YAxis(),0.4),Vector.YAxis(),barOutWd).Extrude(Vector.ZAxis(),wrdPlnDn/10000);
List.Clean([barInnRd,barOutRd],false);