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);