Created
December 21, 2015 01:39
-
-
Save hoorayimhelping/90f44d4f7892f4ad5824 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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