Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Objectif
- * La ville de Montpellier a équipé ses rues de défibrillateurs pour permettre de sauver des victimes d'arrêts cardiaques. Les données correspondant à la position de tous les défibrillateurs sont accessibles en ligne.
- *
- * Sur la base des données fournies dans les tests, vous décidez d'écrire un programme qui permettra aux usagers de trouver le défibrillateur le plus proche de là où ils se trouvent, grâce à leur téléphone portable.
- *
- * Règles
- * En entrée de votre programme sont fournies les données dont vous avez besoin, au format texte. Ces données sont notamment composées de lignes dont chacune représente un défibrillateur. Chaque défibrillateur est représenté par les champs suivants :
- * Numéro identifiant le défibrillateur
- * Nom
- * Adresse
- * Numéro de téléphone à joindre
- * Longitude (en degrés)
- * Latitude (en degrés)
- * Ces champs sont séparés par un point-virgule (;)
- *
- * Attention : les nombres décimaux utilisent la virgule (,) comme séparateur pour la partie décimale. Pensez à transformer la virgule (,) en point (.) si nécessaire pour utiliser les données dans votre programme.
- *
- * DISTANCE
- * La distance d entre deux points A et B sera calculée en utilisant la formule suivante :
- *
- * Note : Dans cette formule, les latitudes et longitudes sont exprimées en radians. 6371 correspond au rayon de la terre en km.
- *
- * Le programme affichera le nom du défibrillateur se trouvant au plus près de la position de l'utilisateur. Cette position est fournie en entrée au programme.
- *
- * Entrées du jeu :
- *
- * Entrée
- * Ligne 1 : la longitude (en degrés) de l'utilisateur
- * Ligne 2 : la latitude (en degrés) de l'utilisateur
- * Ligne 3 : le nombre N de défibrillateurs équipant les rues de Montpellier
- * N lignes suivantes : une description de chaque défibrillateur
- *
- * Sortie
- * Le nom du défibrillateur le plus proche de la position de l'utilisateur.
- *
- * Contraintes
- * 0 < N < 10000
- *
- * Exemple
- * Entrée
- * 3,879483
- * 43,608177
- * 3
- * 1;Maison de la Prevention Sante;6 rue Maguelone 340000 Montpellier;;3,87952263361082;43,6071285339217
- * 2;Hotel de Ville;1 place Georges Freche 34267 Montpellier;;3,89652239197876;43,5987299452849
- * 3;Zoo de Lunaret;50 avenue Agropolis 34090 Mtp;;3,87388031141133;43,6395872778854
- * Sortie
- * Maison de la Prevention Sante
- **/
- const LON = readline(); // longitude
- const LAT = readline(); // latitude
- const N = parseInt(readline()); // le nombre N de défibrillateurs
- const regexDecimal = /,(?=\d)/g;
- const data = Array();
- for (let i = 0; i < N; i++) {
- const DEFIB = readline();
- const strDefib = DEFIB.split(';');
- const idDefib = strDefib[0];
- const name = strDefib[1];
- const address = strDefib[2];
- const phoneNumber = strDefib[3];
- const longitude = parseFloat(strDefib[4].replace(regexDecimal, '.'), 10);
- const latitude = parseFloat(strDefib[5].replace(regexDecimal, '.'), 10);
- data.push({
- idDefib: idDefib,
- name: name,
- address: address,
- phoneNumber: phoneNumber,
- longitude: longitude,
- latitude: latitude,
- });
- }
- const earthRadius = 6371;
- let d = Number.MAX_SAFE_INTEGER;
- let minData = null;
- for (let i = 0; i < N; i++) {
- const longitudeA = parseFloat(LON.replace(regexDecimal, '.'), 10);
- const longitudeB = data[i].longitude;
- const latitudeA = parseFloat(LAT.replace(regexDecimal, '.'), 10);
- const latitudeB = data[i].latitude;
- const x = (longitudeB - longitudeA) * Math.cos((latitudeA + latitudeB) / 2);
- const y = (latitudeB - latitudeA);
- const dTmp = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) * earthRadius;
- if (dTmp < d) {
- d = dTmp;
- minData = data[i];
- }
- }
- console.log(minData?.name);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement