packageutilsimport("errors""math")typeCityDistancestruct{CitystringDistancefloat64}funcVisitFriend(friendsToVisit[]string,friendsCities[][]string,cityDistances[]CityDistance)(int,error){totalDistance:=0.0varlastCityNamestringfor_,friend:=rangefriendsToVisit{friendCity,e:=findFriendCity(friend,friendsCities)ife!=nil{return0,e}iflastCityName==""{distanceToCity,e:=findDistanceToCity(friendCity,cityDistances)ife!=nil{return0,e}totalDistance+=distanceToCity}else{distanceBetweenCities,e:=findDistanceBetweenCities(lastCityName,friendCity,cityDistances)ife!=nil{return0,e}totalDistance+=distanceBetweenCities}lastCityName=friendCity}distanceBackToHome,_:=findDistanceToCity(lastCityName,cityDistances)totalDistance+=distanceBackToHomereturnint(math.Floor(totalDistance)),nil}funcfindDistanceToCity(citystring,cityDistances[]CityDistance)(float64,error){for_,cityDistance:=rangecityDistances{cityName:=cityDistance.Citydistance:=cityDistance.DistanceifcityName==city{returndistance,nil}}return0,errors.New("Didn't find city")}funcfindDistanceBetweenCities(fromCitystring,toCitystring,cityDistances[]CityDistance)(float64,error){totalDistance:=0.0lastDistance:=0.0;for_,cityDistance:=rangecityDistances{city:=cityDistance.Citydistance:=cityDistance.DistanceiflastDistance>0{totalDistance+=math.Sqrt((lastDistance*lastDistance)+(distance*distance))}if(city==fromCity||city==toCity)&&lastDistance>0{returntotalDistance,nil}if(city==fromCity||city==toCity)||lastDistance>0{lastDistance=distance}}return0,errors.New("Didn't find city")}funcfindFriendCity(friendstring,friendCities[][]string)(string,error){for_,friendCity:=rangefriendCities{iffriend==friendCity[0]{returnfriendCity[1],nil}}return"",errors.New("Didn't found city for friend!")}
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.
Discussion on: Daily Challenge #6 - Grandma and her friends
For further actions, you may consider blocking this person and/or reporting abuse