Skip to content

Instantly share code, notes, and snippets.

@hoorayimhelping
Created December 21, 2015 01:39
Show Gist options
  • Select an option

  • Save hoorayimhelping/90f44d4f7892f4ad5824 to your computer and use it in GitHub Desktop.

Select an option

Save hoorayimhelping/90f44d4f7892f4ad5824 to your computer and use it in GitHub Desktop.
diff --git a/js/graph/edge.js b/js/graph/edge.js
index 5aaf7a5..088b3a2 100644
--- a/js/graph/edge.js
+++ b/js/graph/edge.js
@@ -7,12 +7,12 @@ var Edge = function(value, name) {
};
Edge.prototype = {
- add: function(node1, node2) {
+ add: function(source, destination) {
this.nodes = {};
this.nodes = {
- head: node1,
- tail: node2
+ head: source,
+ tail: destination
};
},
diff --git a/js/graph/graph.js b/js/graph/graph.js
index 37483ac..3e9ad12 100644
--- a/js/graph/graph.js
+++ b/js/graph/graph.js
@@ -2,8 +2,8 @@ var Node = require('./node');
var Edge = require('./edge');
var Graph = function() {
- this.edges = [];
- this.nodes = [];
+ this.edges = [];
+ this.nodes = [];
};
Graph.prototype = {
@@ -36,19 +36,18 @@ Graph.prototype = {
var node = edge.nodes.tail;
if (node.id === destination_node.id) {
- total_value += edge.value;
-
// stop walking the graph when a match is found
// TODO: work out a better solution
this.visitNodes();
- return total_value;
+ return edge.value;
}
if (!node.visited) {
total_value = edge.value;
total_value += this.walk(node, destination_node);
+ continue;
}
}
diff --git a/js/graph/node.js b/js/graph/node.js
index 9c03707..520afdb 100644
--- a/js/graph/node.js
+++ b/js/graph/node.js
@@ -10,4 +10,4 @@ Node.prototype = {
}
};
-module.exports = Node;
\ No newline at end of file
+module.exports = Node;
diff --git a/js/maps/solar_system.js b/js/maps/solar_system.js
index ea5dd0b..2526c9b 100644
--- a/js/maps/solar_system.js
+++ b/js/maps/solar_system.js
@@ -13,16 +13,25 @@ var SolarSystem = function() {
low_earth_orbit: new Node('Low Earth Orbit'),
geostationary_transfer: new Node('Geostationary Transfer'),
geostationary_orbit: new Node('Geostationary Orbit'),
+
moon_transfer: new Node('Moon Transfer'),
low_moon_orbit: new Node('Low Moon Orbit'),
moon: new Node('Moon'),
+
earth_transfer: new Node('Earth Transfer'),
+
+ venus_transfer: new Node('Venus Transfer'),
+ low_venus_orbit: new Node('Low Venus Orbit'),
+ venus: new Node('Venus'),
+
mars_transfer: new Node('Mars Transfer'),
low_mars_orbit: new Node('Low Mars Orbit'),
mars: new Node('Mars'),
+
deimos_transfer: new Node('Deimos Transfer'),
low_deimos_orbit: new Node('Low Deimos Orbit'),
deimos: new Node('Deimos'),
+
phobos_transfer: new Node('Phobos Transfer'),
low_phobos_orbit: new Node('Low Phobos Orbit'),
phobos: new Node('Phobos')
@@ -30,18 +39,28 @@ var SolarSystem = function() {
this.edges = {
low_earth_orbit: newEdge({ deltav: 9400, name: 'low_earth_orbit' }),
+
low_earth_orbit_geostationary_transfer: newEdge({ deltav: 2440, name: 'low_earth_orbit-geostationary_transfer' }),
geostationary_transfer_geo_orbit: newEdge({ deltav: 1470, name: 'geostationary_transfer-geostationary_orbit' }),
+
low_earth_orbit_moon_transfer: newEdge({ deltav: 3260, name: 'low_earth_orbit-moon_transfer' }),
moon_transfer_low_moon_orbit: newEdge({ deltav: 680, name: 'moon_transfer-low_moon_orbit' }),
low_moon_orbit_moon_landing: newEdge({ deltav: 1730, name: 'low_moon_orbit-moon_landing' }),
+
low_earth_orbit_earth_transfer: newEdge({ deltav: 3210, name: 'low_earth_orbit-earth_transfer' }),
+
+ earth_transfer_venus_transfer: newEdge({ deltav: 640, name: 'earth_transfer-venus_transfer' }),
+ venus_transfer_low_venus_orbit: newEdge({ deltav: 2940, name: 'venus_transfer-low_venus_orbit' }),
+ low_venus_orbit_venus_landing: newEdge({ deltav: 2000, name: 'low_venus_orbit-venus_landing' }),
+
earth_transfer_mars_transfer: newEdge({ deltav: 1060, name: 'earth_transfer-mars_transfer' }),
mars_transfer_low_mars_orbit: newEdge({ deltav: 1440, name: 'mars_transfer-low_mars_orbit' }),
low_mars_orbit_mars_landing: newEdge({ deltav: 2000, name: 'low_mars_orbit-mars_landing' }),
+
mars_transfer_deimos_transfer: newEdge({ deltav: 340, name: 'mars_transfer-deimos_transfer' }),
deimos_transfer_low_deimos_orbit: newEdge({ deltav: 652, name: 'deimos_transfer-low_deimos_orbit' }),
low_deimos_orbit_deimos_landing: newEdge({ deltav: 4, name: 'low_deimos_orbit-deimos_landing' }),
+
mars_transfer_phobos_transfer: newEdge({ deltav: 740, name: 'mars_transfer-phobos_transfer'}),
phobos_transfer_low_phobos_orbit: newEdge({ deltav: 543, name: 'mars_transfer-phobos_transfer'}),
low_phobos_orbit_phobos_landing: newEdge({ deltav: 8, name: 'low_phobos_orbit-phobos_landing'})
@@ -56,6 +75,7 @@ SolarSystem.prototype = {
},
buildGraph: function(graph, edges, nodes) {
+ // earth
graph.addEdge(edges.low_earth_orbit, nodes.earth, nodes.low_earth_orbit);
graph.addEdge(edges.low_earth_orbit_geostationary_transfer, nodes.low_earth_orbit, nodes.geostationary_transfer);
@@ -66,8 +86,14 @@ SolarSystem.prototype = {
graph.addEdge(edges.low_moon_orbit_moon_landing, nodes.low_moon_orbit, nodes.moon);
graph.addEdge(edges.low_earth_orbit_earth_transfer, nodes.low_earth_orbit, nodes.earth_transfer);
- graph.addEdge(edges.earth_transfer_mars_transfer, nodes.earth_transfer, nodes.mars_transfer);
+ // venus
+ graph.addEdge(edges.earth_transfer_venus_transfer, nodes.earth_transfer, nodes.venus_transfer);
+ graph.addEdge(edges.venus_transfer_low_venus_orbit, nodes.venus_transfer, nodes.low_venus_orbit);
+ graph.addEdge(edges.low_venus_orbit_venus_landing, nodes.low_venus_orbit, nodes.venus);
+
+ // mars
+ graph.addEdge(edges.earth_transfer_mars_transfer, nodes.earth_transfer, nodes.mars_transfer);
graph.addEdge(edges.mars_transfer_low_mars_orbit, nodes.mars_transfer, nodes.low_mars_orbit);
graph.addEdge(edges.low_mars_orbit_mars_landing, nodes.low_mars_orbit, nodes.mars);
diff --git a/test/solar_system.js b/test/solar_system.js
index 5cd1f48..3e8289a 100644
--- a/test/solar_system.js
+++ b/test/solar_system.js
@@ -42,6 +42,38 @@ describe("one-way trips from earth", function() {
});
});
+ describe("to venutian space", function() {
+ it("calculates the delta-v to venus transfer orbit", function() {
+ var total_value = graph.walk(nodes.earth, nodes.venus_transfer);
+ var expected_value = edges.low_earth_orbit.value +
+ edges.low_earth_orbit_earth_transfer.value +
+ edges.earth_transfer_venus_transfer.value;
+
+ expect(total_value).to.equal(expected_value);
+ });
+
+ it("calculates the delta-v to low venus orbit", function() {
+ var total_value = graph.walk(nodes.earth, nodes.low_venus_orbit);
+ var expected_value = edges.low_earth_orbit.value +
+ edges.low_earth_orbit_earth_transfer.value +
+ edges.earth_transfer_venus_transfer.value +
+ edges.venus_transfer_low_venus_orbit.value;
+
+ expect(total_value).to.equal(expected_value);
+ });
+
+ it("calculates the delta-v to a venus landing", function() {
+ var total_value = graph.walk(nodes.earth, nodes.venus);
+ var expected_value = edges.low_earth_orbit.value +
+ edges.low_earth_orbit_earth_transfer.value +
+ edges.earth_transfer_venus_transfer.value +
+ edges.venus_transfer_low_venus_orbit.value +
+ edges.low_venus_orbit_venus_landing.value;
+
+ expect(total_value).to.equal(expected_value);
+ });
+ });
+
describe("to martian space", function() {
it("calculates the delta-v to mars transfer orbit", function() {
var total_value = graph.walk(nodes.earth, nodes.mars_transfer);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment