Find latitude and longitude of utmost 20 countries, ordered by population, with a population greater or equal to the population limit given below and have atleast one currency exclusively for themselves. (countries like Madagascar, Sri Lanka but not India, USA). Use the country details from this dataset.
Your task is to find the sum of the length of all lines (in kms) that can be drawn between co-ordinates of these countries.
Population limit: 277500
Note: Population limit will change at random intervals. So please make sure answer is computed for the correct population limit before submitting.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
int populationLimit = 277500;
int r = 6371000;// metres
ArrayList<Country> allCountries = new ArrayList<>();
ArrayList<Country> countries = new ArrayList<>();
for (Country country : allCountries) {
if (country.getPopulation() >= populationLimit && country.getNumberOfCurencies() > 1) {
countries.add(country);
if (countries.size() == 20) {
break;
}
}
}
double total = 0;
for (int i = 0; i < countries.size(); i++) {
for (int j = i + 1; j < countries.size(); j++) {
double fi1 = countries.get(i).getLatitude() * Math.PI / 180; // φ, λ in radians
double fi2 = countries.get(j).getLatitude() * Math.PI / 180;
double dFi = (countries.get(j).getLatitude() - countries.get(i).getLatitude()) * Math.PI / 180;
double dLam = (countries.get(j).getLongitude() - countries.get(i).getLongitude()) * Math.PI / 180;
double a = Math.sin(dFi / 2) * Math.sin(dFi / 2) +
Math.cos(fi1) * Math.cos(fi2) * Math.sin(dLam / 2) * Math.sin(dLam / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
total += r * c;
}
}
System.out.printf("Total distance: %.2f\n", total / 1000);
}
}
Comments
Leave a comment