Greedy Algorithm
by Paco86
JavaScript
let stations = {};
stations['kone'] = new Set(['id', 'nv', 'ut']);
stations['ktwo'] = new Set(['wa', 'id', 'mt']);
stations['kthree'] = new Set(['or', 'nv', 'ca']);
stations['kfour'] = new Set(['nv', 'ut']);
stations['kfive'] = new Set(['ca', 'az']);
let finalStations = [];
//get all states
let statesNeed = new Set();
for(let key in stations){
for(let item of stations[key]){
statesNeed.add(item);
}
}
while(statesNeed.size > 0){
let bestStation = new Set();
let stationName;
for(let key in stations){
var bestStations = new Set();
var thisStation = new Set([...stations[key]].filter(x => statesNeed.has(x)));
if(bestStation.size < thisStation.size){
bestStation = thisStation;
stationName = key;
}
}
finalStations.push(stationName);
statesNeed = new Set([...statesNeed].filter(x => !bestStation.has(x)));
}
alert(finalStations);