constparseData=(string)=>{// Return map of cities and their rainfalls, assumes well-formed datareturnstring.split('\n').map(line=>line.split(':')).map(cityMonths=>{return{city:cityMonths[0],rainfalls:cityMonths[1].split(',').map(month=>parseFloat(month.split('')[1])).filter(r=>!isNaN(r))}}).reduce((m,cityRainfalls)=>{m[cityRainfalls.city]=cityRainfalls.rainfallsreturnm},{})}constcalcMean=(nums)=>nums.reduce((t,n)=>t+n,0)/nums.lengthconstcalcVariance=(nums)=>{constmean=calcMean(nums)returncalcMean(nums.map(num=>Math.pow(num-mean,2)))}constmean=(town,string)=>{constcityRainfallsMap=parseData(string)if(!cityRainfallsMap[town]||cityRainfallsMap[town].length<1)return-1returncalcMean(cityRainfallsMap[town])}constvariance=(town,string)=>{constcityRainfallsMap=parseData(string)if(!cityRainfallsMap[town]||cityRainfallsMap[town].length<1)return-1returncalcVariance(cityRainfallsMap[town])}// Tests assume data, data1 in scopeconsttest=(fn,town,string,expected)=>{constresult=fn(town,string)console.log(`${town}${result} === ${expected} ?`)}test(variance,"London",data,57.42833333333374)test(mean,"London",data,51.199999999999996)test(mean,"Seattle",data,-1)test(variance,"Seattle",data,-1)test(mean,"Seattle","Seattle:",-1)test(variance,"Seattle","Seattle:",-1)test(variance,'Beijing',data1,'4437.0380555556')test(variance,'Lima',data,'1.5790972222222')
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
JS solution