Skip to content

Instantly share code, notes, and snippets.

@hoorayimhelping
Created December 21, 2015 00:27
Show Gist options
  • Select an option

  • Save hoorayimhelping/75ae8a1a515047f27091 to your computer and use it in GitHub Desktop.

Select an option

Save hoorayimhelping/75ae8a1a515047f27091 to your computer and use it in GitHub Desktop.
diff --git a/js/graph/graph.js b/js/graph/graph.js
index 37483ac..18e119c 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 = {
@@ -31,13 +31,15 @@ Graph.prototype = {
start_node.visited = true;
- for (var i = 0, l = start_node.edges.length; i < l; i++) {
+ for (var i = 0, l = start_node.edges.length; i < l; ++i) {
var edge = edges[i];
var node = edge.nodes.tail;
if (node.id === destination_node.id) {
total_value += edge.value;
+console.log(node.id, '==>', destination_node.id, '*******', edge.name, edge.value, total_value)
+
// stop walking the graph when a match is found
// TODO: work out a better solution
this.visitNodes();
@@ -46,10 +48,18 @@ Graph.prototype = {
}
if (!node.visited) {
+console.log(node.id, '==>', destination_node.id, '--------', edge.name, edge.value, total_value)
total_value = edge.value;
total_value += this.walk(node, destination_node);
}
+
+ // if last iteration of loop, set total value to 0 fam
+ // if (i === l) {
+ // console.log('hi', total_value)
+ // total_value = 0;
+ // return total_value;
+ // }
}
return total_value;
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..7eaf0f1 100644
--- a/js/maps/solar_system.js
+++ b/js/maps/solar_system.js
@@ -17,6 +17,9 @@ var SolarSystem = function() {
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'),
@@ -36,6 +39,9 @@ var SolarSystem = function() {
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' }),
@@ -56,18 +62,25 @@ 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);
- graph.addEdge(edges.geostationary_transfer_geo_orbit, nodes.geostationary_transfer, nodes.geostationary_orbit);
-
graph.addEdge(edges.low_earth_orbit_moon_transfer, nodes.low_earth_orbit, nodes.moon_transfer);
graph.addEdge(edges.moon_transfer_low_moon_orbit, nodes.moon_transfer, nodes.low_moon_orbit);
graph.addEdge(edges.low_moon_orbit_moon_landing, nodes.low_moon_orbit, nodes.moon);
+ graph.addEdge(edges.low_earth_orbit_geostationary_transfer, nodes.low_earth_orbit, nodes.geostationary_transfer);
+ graph.addEdge(edges.geostationary_transfer_geo_orbit, nodes.geostationary_transfer, nodes.geostationary_orbit);
+
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