diff --git a/greedy-algorithms/notes.md b/greedy-algorithms/notes.md
index 34ac568bd127ac3a3e7bb1e39af72fffa2cd02f9..901e99656efa04003da5a9d79b8080c13874ccf1 100644
--- a/greedy-algorithms/notes.md
+++ b/greedy-algorithms/notes.md
@@ -126,8 +126,8 @@ Problem: [same as above]
## Choosing a Forward Edge
* Exhaustive search:
- * Generate …
- * Check that …
+ * Generate all edges that travel up to distance `range` along the route
+ * Check that the chosen edge travels farthest (always favors the current candidate)
## Example
@@ -143,12 +143,15 @@ Problem: [same as above]
Location Next Location
-------- -------------
- a …
- …
+ a c
+ c d
+ d e
+ e h
+ h i
Path
----
- a → …
+ a → c → d → e → h → i
--------------------------------------------------------------------------------
@@ -214,22 +217,22 @@ Problem: Given frequencies for a set of symbols, create a lossless binary encodi
## DAG
* Edges (actions):
- * …
+ * Combining two sets of symbols
* Vertices (situations):
- * …
+ * Symbol partitionnings
* Edge weights:
- * …
+ * Total frequency of the combined sets
* Topological order:
- * …
+ * By decreasing number of sets (parts in the paritioning)
* Goal:
- * …
+ * Find the shortest path
## Choosing a Forward Edge
* Direct solution:
- * …
- * …
- * …
+ * Choose the lowest-frequency set
+ * Choose the second-lowest-frequency set
+ * Choose the edge that combines those sets
## Example
diff --git a/greedy-algorithms/src/features/fueling/solver.js b/greedy-algorithms/src/features/fueling/solver.js
index 18326349a6727b0110a14ffee9f92a0950e54315..0f04b420a88853613bd752100fcc9021ced89eca 100644
--- a/greedy-algorithms/src/features/fueling/solver.js
+++ b/greedy-algorithms/src/features/fueling/solver.js
@@ -7,7 +7,16 @@ export function planFuelings(gaps, range) {
gaps.every((gap) => gap <= range),
`Tried to find a fueling plan crossing a gap longer than the range ${range}.`,
);
- const results = [];
- // TODO: stub
+ const destination = gaps.length;
+ const results = [0];
+ while (results[results.length - 1] !== destination) {
+ let best = undefined;
+ for (let distance = 0, candidate = results[results.length - 1];
+ distance <= range && candidate <= destination;
+ distance += gaps[candidate], ++candidate) {
+ best = candidate;
+ }
+ results.push(best);
+ }
return results;
}