From 4a98a14bc13f65c7b5ab1dfbaa0b5adbfcb5893b Mon Sep 17 00:00:00 2001 From: Kevin Nguyen Date: Tue, 21 Jun 2016 21:48:53 -0700 Subject: [PATCH] code for chapter 8 in javascript --- .../javascript/01_set_covering.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 08_greedy_algorithms/javascript/01_set_covering.js diff --git a/08_greedy_algorithms/javascript/01_set_covering.js b/08_greedy_algorithms/javascript/01_set_covering.js new file mode 100644 index 0000000..a2bb41e --- /dev/null +++ b/08_greedy_algorithms/javascript/01_set_covering.js @@ -0,0 +1,31 @@ +'use strict'; + +// You pass an array in, and it gets converted to a set. +let states_needed = new Set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"]); + +const 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"]); + +const final_stations = new Set(); + + +while (states_needed.size) { + let best_station = null; + let states_covered = new Set(); + for (let station in stations) { + let states = stations[station]; + let covered = new Set([...states_needed].filter((x) => states.has(x))); + if (covered.size > states_covered.size) { + best_station = station; + states_covered = covered; + } + } + states_needed = new Set([...states_needed].filter((x) => !states_covered.has(x))); + final_stations.add(best_station); +} + +console.log(final_stations); // Set { 'kone', 'ktwo', 'kthree', 'kfive' }