Created
December 20, 2015 17:01
-
-
Save hoorayimhelping/119d5d53bac8f9750e00 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/.editorconfig b/.editorconfig | |
| new file mode 100644 | |
| index 0000000..5760be5 | |
| --- /dev/null | |
| +++ b/.editorconfig | |
| @@ -0,0 +1,12 @@ | |
| +# http://editorconfig.org | |
| +root = true | |
| + | |
| +[*] | |
| +indent_style = space | |
| +indent_size = 2 | |
| +charset = utf-8 | |
| +trim_trailing_whitespace = true | |
| +insert_final_newline = true | |
| + | |
| +[*.md] | |
| +trim_trailing_whitespace = false | |
| diff --git a/gulpfile.js b/gulpfile.js | |
| index 0d6416b..8774b91 100644 | |
| --- a/gulpfile.js | |
| +++ b/gulpfile.js | |
| @@ -11,73 +11,72 @@ var shell = require('gulp-shell'); | |
| var react = require('gulp-react'); | |
| var paths = { | |
| - 'js_source': { | |
| - graph: 'js/graph/', | |
| - maps: 'js/maps', | |
| - canvas: '/js/canvas' | |
| - }, | |
| - 'js_test': 'js/test/', | |
| - 'js_dist': 'js/', | |
| - 'react_source': 'js/views/', | |
| - 'react_dist': 'js/views/' | |
| + 'js_source': { | |
| + graph: 'js/graph/', | |
| + maps: 'js/maps', | |
| + canvas: '/js/canvas' | |
| + }, | |
| + 'js_test': 'js/test/', | |
| + 'js_dist': 'js/', | |
| + 'react_source': 'js/views/', | |
| + 'react_dist': 'js/views/' | |
| }; | |
| gulp.task('env-dev', function() { | |
| - process.env.NODE_ENV = 'development'; | |
| + process.env.NODE_ENV = 'development'; | |
| }); | |
| gulp.task('env-prod', function() { | |
| - process.env.NODE_ENV = 'production'; | |
| + process.env.NODE_ENV = 'production'; | |
| }); | |
| gulp.task('lint', function() { | |
| - return gulp.src([ | |
| - paths.js_source.graph + '*.js', | |
| - paths.js_source.maps + '*.js', | |
| - paths.js_source.canvas + '*.js', | |
| - paths.js_test + '*.js', | |
| - 'gulpfile.js' | |
| - ]) | |
| - .pipe(jshint({ esnext: true })) | |
| - .pipe(jshint.reporter('default', { verbose: true })) | |
| - .pipe(jshint.reporter('fail')); | |
| + return gulp.src([ | |
| + paths.js_source.graph + '*.js', | |
| + paths.js_source.maps + '*.js', | |
| + paths.js_source.canvas + '*.js', | |
| + paths.js_test + '*.js', | |
| + 'gulpfile.js' | |
| + ]) | |
| + .pipe(jshint({ esnext: true })) | |
| + .pipe(jshint.reporter('default', { verbose: true })) | |
| + .pipe(jshint.reporter('fail')); | |
| }); | |
| gulp.task('test', shell.task([ | |
| - 'tape ' + paths.js_test + '* | faucet', | |
| + 'tape ' + paths.js_test + '* | faucet', | |
| ])); | |
| gulp.task('test-debug', function() { | |
| - return gulp.src(paths.js_test + '/*.js') | |
| - .pipe(tape()); | |
| + return gulp.src(paths.js_test + '/*.js') | |
| + .pipe(tape()); | |
| }); | |
| gulp.task('transform', function() { | |
| - return gulp.src(paths.react_source + '*.jsx') | |
| - .pipe(react()) | |
| - .pipe(gulp.dest(paths.react_dist)); | |
| + return gulp.src(paths.react_source + '*.jsx') | |
| + .pipe(react()) | |
| + .pipe(gulp.dest(paths.react_dist)); | |
| }); | |
| gulp.task('build', function() { | |
| - return browserify(paths.react_dist + 'main.js') | |
| - .transform(reactify) | |
| - .bundle() | |
| - .pipe(source('app.js')) | |
| - .pipe(gulp.dest(paths.js_dist)); | |
| + return browserify(paths.react_dist + 'main.js') | |
| + .transform(reactify) | |
| + .bundle() | |
| + .pipe(source('app.js')) | |
| + .pipe(gulp.dest(paths.js_dist)); | |
| }); | |
| gulp.task('default', function() { | |
| - gulp.watch( | |
| - [ | |
| - paths.react_source + '/*.jsx', | |
| - paths.js_source.graph + '*.js', | |
| - paths.js_source.maps + '*.js', | |
| - paths.js_source.canvas + '*.js' | |
| - ], | |
| - ['env-dev', 'transform', 'build'] | |
| - ).on('error', function(error) { | |
| - console.log(error.toString()); | |
| - }); | |
| + gulp.watch([ | |
| + paths.react_source + '/*.jsx', | |
| + paths.js_source.graph + '*.js', | |
| + paths.js_source.maps + '*.js', | |
| + paths.js_source.canvas + '*.js' | |
| + ], | |
| + ['env-dev', 'transform', 'build'] | |
| + ).on('error', function(error) { | |
| + console.log(error.toString()); | |
| + }); | |
| }); | |
| gulp.task('development', ['env-dev', 'lint', 'test', 'transform', 'build']); | |
| diff --git a/js/app.js b/js/app.js | |
| index 1b27136..8bcf526 100644 | |
| --- a/js/app.js | |
| +++ b/js/app.js | |
| @@ -62,27 +62,27 @@ module.exports = Renderer; | |
| },{}],2:[function(require,module,exports){ | |
| var Edge = function(value, name) { | |
| - this.value = value; | |
| - this.name = name; | |
| + this.value = value; | |
| + this.name = name; | |
| - this.id = name + '-' + value; | |
| - this.nodes = {}; | |
| + this.id = name + '-' + value; | |
| + this.nodes = {}; | |
| }; | |
| Edge.prototype = { | |
| - add: function(node1, node2) { | |
| - this.nodes = {}; | |
| + add: function(node1, node2) { | |
| + this.nodes = {}; | |
| - this.nodes = { | |
| - head: node1, | |
| - tail: node2 | |
| - }; | |
| - }, | |
| + this.nodes = { | |
| + head: node1, | |
| + tail: node2 | |
| + }; | |
| + }, | |
| - areAdjacent: function(node1, node2) { | |
| - return this.nodes.head.id === node1.id && | |
| - this.nodes.tail.id === node2.id; | |
| - } | |
| + areAdjacent: function(node1, node2) { | |
| + return this.nodes.head.id === node1.id && | |
| + this.nodes.tail.id === node2.id; | |
| + } | |
| }; | |
| module.exports = Edge; | |
| @@ -98,69 +98,69 @@ var Graph = function() { | |
| Graph.prototype = { | |
| addEdge: function(edge, head_node, tail_node) { | |
| - edge.add(head_node, tail_node); | |
| + edge.add(head_node, tail_node); | |
| - this.nodes.push(head_node, tail_node); | |
| + this.nodes.push(head_node, tail_node); | |
| - head_node.addEdge(edge); | |
| - tail_node.addEdge(edge); | |
| + head_node.addEdge(edge); | |
| + tail_node.addEdge(edge); | |
| - this.edges.push(edge); | |
| + this.edges.push(edge); | |
| }, | |
| areAdjacent: function(head_node, tail_node) { | |
| - return this.edges.some(function(edge) { | |
| - return edge.areAdjacent(head_node, tail_node); | |
| - }); | |
| + return this.edges.some(function(edge) { | |
| + return edge.areAdjacent(head_node, tail_node); | |
| + }); | |
| }, | |
| // depth first search | |
| walk: function(start_node, destination_node) { | |
| - var total_value = 0; | |
| + var total_value = 0; | |
| - start_node.visited = true; | |
| + start_node.visited = true; | |
| - start_node.edges.forEach(function(edge) { | |
| - var node = edge.nodes.tail; | |
| + start_node.edges.forEach(function(edge) { | |
| + var node = edge.nodes.tail; | |
| - if (node.id === destination_node.id) { | |
| - total_value += edge.value; | |
| - return; | |
| - } | |
| + if (node.id === destination_node.id) { | |
| + total_value += edge.value; | |
| + return; | |
| + } | |
| - if (!node.visited) { | |
| - total_value = edge.value; | |
| + if (!node.visited) { | |
| + total_value = edge.value; | |
| - total_value += this.walk(node, destination_node); | |
| - } | |
| - }, this); | |
| + total_value += this.walk(node, destination_node); | |
| + } | |
| + }, this); | |
| - return total_value; | |
| + return total_value; | |
| }, | |
| resetNodes: function() { | |
| - this.nodes.forEach(function(node) { | |
| - node.visited = false; | |
| - }); | |
| + this.nodes.forEach(function(node) { | |
| + node.visited = false; | |
| + }); | |
| }, | |
| render: function(start_node, destination_node, renderer) { | |
| - start_node.visited = true; | |
| + start_node.visited = true; | |
| - start_node.edges.forEach(function(edge, i) { | |
| - renderer.line(10 * i, 10 * i, (20 + i) * i, (20 + i) * i); | |
| + start_node.edges.forEach(function(edge, i) { | |
| + renderer.line(10 * i, 10 * i, (20 + i) * i, (20 + i) * i); | |
| - var node = edge.nodes.tail; | |
| + var node = edge.nodes.tail; | |
| - if (node.id === destination_node.id) { | |
| - return; | |
| - } | |
| + if (node.id === destination_node.id) { | |
| + return; | |
| + } | |
| - if (!node.visited) { | |
| - renderer.circle(i, i, 5); | |
| - this.render(node, destination_node, renderer); | |
| - } | |
| - }, this); | |
| + if (!node.visited) { | |
| + renderer.circle(i, i, 5); | |
| + this.render(node, destination_node, renderer); | |
| + } | |
| + }, this); | |
| } | |
| }; | |
| @@ -192,60 +192,70 @@ var newEdge = function(options) { | |
| // values taken from http://i.imgur.com/SqdzxzF.png | |
| var SolarSystem = function() { | |
| - this.nodes = { | |
| - earth: new Node('Earth'), | |
| - leo: new Node('Low Earth Orbit'), | |
| - geo_transfer: new Node('Geostationary Transfer'), | |
| - geostationary: 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'), | |
| - mars_transfer: new Node('Mars Transfer'), | |
| - deimos_transfer: new Node('Deimos Transfer'), | |
| - low_deimos_orbit: new Node('Low Deimos Orbit'), | |
| - deimos: new Node('Deimos') | |
| - }; | |
| + this.nodes = { | |
| + earth: new Node('Earth'), | |
| + leo: new Node('Low Earth Orbit'), | |
| + geo_transfer: new Node('Geostationary Transfer'), | |
| + geostationary: 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'), | |
| + mars_transfer: new Node('Mars Transfer'), | |
| + 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'), | |
| + }; | |
| - this.edges = { | |
| - low_earth_orbit: newEdge({ deltav: 9400, name: 'low_earth_orbit' }), | |
| - leo_geo_transfer: newEdge({ deltav: 2440, name: 'leo-geo_transfer' }), | |
| - geo_transfer_geo_orbit: newEdge({ deltav: 1470, name: 'geostationary_transfer-geostationary_orbit' }), | |
| - leo_moon_transfer: newEdge({ deltav: 3260, name: 'leo-moon_transfer' }), | |
| - moon_transfer_lmo: newEdge({ deltav: 680, name: 'moon_transfer-low_moon_orbit' }), | |
| - moon_landing: newEdge({ deltav: 1730, name: 'moon-landing' }), | |
| - leo_earth_transfer: newEdge({ deltav: 3210, name: 'leo-earth_transfer' }), | |
| - earth_transfer_mars_transfer: newEdge({ deltav: 1060, name: 'earth_transfer-mars_transfer' }), | |
| - 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' }), | |
| - deimos_landing: newEdge({ deltav: 4, name: 'deimos_landing' }) | |
| - }; | |
| + this.edges = { | |
| + low_earth_orbit: newEdge({ deltav: 9400, name: 'low_earth_orbit' }), | |
| + leo_geo_transfer: newEdge({ deltav: 2440, name: 'leo-geo_transfer' }), | |
| + geo_transfer_geo_orbit: newEdge({ deltav: 1470, name: 'geostationary_transfer-geostationary_orbit' }), | |
| + leo_moon_transfer: newEdge({ deltav: 3260, name: 'leo-moon_transfer' }), | |
| + moon_transfer_lmo: newEdge({ deltav: 680, name: 'moon_transfer-low_moon_orbit' }), | |
| + moon_landing: newEdge({ deltav: 1730, name: 'moon-landing' }), | |
| + leo_earth_transfer: newEdge({ deltav: 3210, name: 'leo-earth_transfer' }), | |
| + earth_transfer_mars_transfer: newEdge({ deltav: 1060, name: 'earth_transfer-mars_transfer' }), | |
| + 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' }), | |
| + deimos_landing: newEdge({ deltav: 4, name: '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'}), | |
| + phobos_landing: newEdge({ deltav: 8, name: 'phobos_landing'}) | |
| + }; | |
| }; | |
| SolarSystem.prototype = { | |
| - unwalkNodes: function() { | |
| - for (var node in this.nodes) { | |
| - this.nodes[node].visited = false; | |
| - } | |
| - }, | |
| + unwalkNodes: function() { | |
| + for (var node in this.nodes) { | |
| + this.nodes[node].visited = false; | |
| + } | |
| + }, | |
| - buildGraph: function(graph, edges, nodes) { | |
| - graph.addEdge(edges.low_earth_orbit, nodes.earth, nodes.leo); | |
| + buildGraph: function(graph, edges, nodes) { | |
| + graph.addEdge(edges.low_earth_orbit, nodes.earth, nodes.leo); | |
| - graph.addEdge(edges.leo_geo_transfer, nodes.leo, nodes.geo_transfer); | |
| - graph.addEdge(edges.geo_transfer_geo_orbit, nodes.geo_transfer, nodes.geostationary); | |
| + graph.addEdge(edges.leo_geo_transfer, nodes.leo, nodes.geo_transfer); | |
| + graph.addEdge(edges.geo_transfer_geo_orbit, nodes.geo_transfer, nodes.geostationary); | |
| - graph.addEdge(edges.leo_moon_transfer, nodes.leo, nodes.moon_transfer); | |
| - graph.addEdge(edges.moon_transfer_lmo, nodes.moon_transfer, nodes.low_moon_orbit); | |
| - graph.addEdge(edges.moon_landing, nodes.low_moon_orbit, nodes.moon); | |
| + graph.addEdge(edges.leo_moon_transfer, nodes.leo, nodes.moon_transfer); | |
| + graph.addEdge(edges.moon_transfer_lmo, nodes.moon_transfer, nodes.low_moon_orbit); | |
| + graph.addEdge(edges.moon_landing, nodes.low_moon_orbit, nodes.moon); | |
| - graph.addEdge(edges.leo_earth_transfer, nodes.leo, nodes.earth_transfer); | |
| - graph.addEdge(edges.earth_transfer_mars_transfer, nodes.earth_transfer, nodes.mars_transfer); | |
| + graph.addEdge(edges.leo_earth_transfer, nodes.leo, nodes.earth_transfer); | |
| + graph.addEdge(edges.earth_transfer_mars_transfer, nodes.earth_transfer, nodes.mars_transfer); | |
| - graph.addEdge(edges.mars_transfer_deimos_transfer, nodes.mars_transfer, nodes.deimos_transfer); | |
| - graph.addEdge(edges.deimos_transfer_low_deimos_orbit, nodes.deimos_transfer, nodes.low_deimos_orbit); | |
| - graph.addEdge(edges.deimos_landing, nodes.low_deimos_orbit, nodes.deimos); | |
| - } | |
| + graph.addEdge(edges.mars_transfer_deimos_transfer, nodes.mars_transfer, nodes.deimos_transfer); | |
| + graph.addEdge(edges.deimos_transfer_low_deimos_orbit, nodes.deimos_transfer, nodes.low_deimos_orbit); | |
| + graph.addEdge(edges.deimos_landing, nodes.low_deimos_orbit, nodes.deimos); | |
| + | |
| + graph.addEdge(edges.mars_transfer_phobos_transfer, nodes.mars_transfer, nodes.phobos_transfer); | |
| + graph.addEdge(edges.phobos_transfer_low_phobos_orbit, nodes.phobos_transfer, nodes.low_phobos_orbit); | |
| + graph.addEdge(edges.phobos_landing, nodes.low_phobos_orbit, nodes.phobos); | |
| + } | |
| }; | |
| module.exports = new SolarSystem(); | |
| diff --git a/js/graph/edge.js b/js/graph/edge.js | |
| index a9a16e9..5aaf7a5 100644 | |
| --- a/js/graph/edge.js | |
| +++ b/js/graph/edge.js | |
| @@ -1,25 +1,25 @@ | |
| var Edge = function(value, name) { | |
| - this.value = value; | |
| - this.name = name; | |
| + this.value = value; | |
| + this.name = name; | |
| - this.id = name + '-' + value; | |
| - this.nodes = {}; | |
| + this.id = name + '-' + value; | |
| + this.nodes = {}; | |
| }; | |
| Edge.prototype = { | |
| - add: function(node1, node2) { | |
| - this.nodes = {}; | |
| + add: function(node1, node2) { | |
| + this.nodes = {}; | |
| - this.nodes = { | |
| - head: node1, | |
| - tail: node2 | |
| - }; | |
| - }, | |
| + this.nodes = { | |
| + head: node1, | |
| + tail: node2 | |
| + }; | |
| + }, | |
| - areAdjacent: function(node1, node2) { | |
| - return this.nodes.head.id === node1.id && | |
| - this.nodes.tail.id === node2.id; | |
| - } | |
| + areAdjacent: function(node1, node2) { | |
| + return this.nodes.head.id === node1.id && | |
| + this.nodes.tail.id === node2.id; | |
| + } | |
| }; | |
| -module.exports = Edge; | |
| \ No newline at end of file | |
| +module.exports = Edge; | |
| diff --git a/js/graph/graph.js b/js/graph/graph.js | |
| index 079e82e..50c73d8 100644 | |
| --- a/js/graph/graph.js | |
| +++ b/js/graph/graph.js | |
| @@ -8,69 +8,82 @@ var Graph = function() { | |
| Graph.prototype = { | |
| addEdge: function(edge, head_node, tail_node) { | |
| - edge.add(head_node, tail_node); | |
| + edge.add(head_node, tail_node); | |
| - this.nodes.push(head_node, tail_node); | |
| + this.nodes.push(head_node, tail_node); | |
| - head_node.addEdge(edge); | |
| - tail_node.addEdge(edge); | |
| + head_node.addEdge(edge); | |
| + tail_node.addEdge(edge); | |
| - this.edges.push(edge); | |
| + this.edges.push(edge); | |
| }, | |
| areAdjacent: function(head_node, tail_node) { | |
| - return this.edges.some(function(edge) { | |
| - return edge.areAdjacent(head_node, tail_node); | |
| - }); | |
| + return this.edges.some(function(edge) { | |
| + return edge.areAdjacent(head_node, tail_node); | |
| + }); | |
| }, | |
| // depth first search | |
| walk: function(start_node, destination_node) { | |
| - var total_value = 0; | |
| + var total_value = 0; | |
| + var edges = start_node.edges; | |
| - start_node.visited = true; | |
| + start_node.visited = true; | |
| - start_node.edges.forEach(function(edge) { | |
| - var node = edge.nodes.tail; | |
| + 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; | |
| - return; | |
| - } | |
| + if (node.id === destination_node.id) { | |
| + total_value += edge.value; | |
| - if (!node.visited) { | |
| - total_value = edge.value; | |
| + // stop walking the graph when a match is found | |
| + // TODO: work out a better solution | |
| + this.visitNodes(); | |
| - total_value += this.walk(node, destination_node); | |
| - } | |
| - }, this); | |
| + return total_value; | |
| + } | |
| - return total_value; | |
| + if (!node.visited) { | |
| + total_value = edge.value; | |
| + | |
| + total_value += this.walk(node, destination_node); | |
| + } | |
| + }; | |
| + | |
| + return total_value; | |
| }, | |
| resetNodes: function() { | |
| - this.nodes.forEach(function(node) { | |
| - node.visited = false; | |
| - }); | |
| + this.nodes.forEach(function(node) { | |
| + node.visited = false; | |
| + }); | |
| + }, | |
| + | |
| + visitNodes: function() { | |
| + this.nodes.forEach(function(node) { | |
| + node.visited = true; | |
| + }); | |
| }, | |
| render: function(start_node, destination_node, renderer) { | |
| - start_node.visited = true; | |
| + start_node.visited = true; | |
| - start_node.edges.forEach(function(edge, i) { | |
| - renderer.line(10 * i, 10 * i, (20 + i) * i, (20 + i) * i); | |
| + start_node.edges.forEach(function(edge, i) { | |
| + renderer.line(10 * i, 10 * i, (20 + i) * i, (20 + i) * i); | |
| - var node = edge.nodes.tail; | |
| + var node = edge.nodes.tail; | |
| - if (node.id === destination_node.id) { | |
| - return; | |
| - } | |
| + if (node.id === destination_node.id) { | |
| + return; | |
| + } | |
| - if (!node.visited) { | |
| - renderer.circle(i, i, 5); | |
| - this.render(node, destination_node, renderer); | |
| - } | |
| - }, this); | |
| + if (!node.visited) { | |
| + renderer.circle(i, i, 5); | |
| + this.render(node, destination_node, renderer); | |
| + } | |
| + }, this); | |
| } | |
| }; | |
| diff --git a/js/maps/solar_system.js b/js/maps/solar_system.js | |
| index eb13069..c884617 100644 | |
| --- a/js/maps/solar_system.js | |
| +++ b/js/maps/solar_system.js | |
| @@ -8,60 +8,70 @@ var newEdge = function(options) { | |
| // values taken from http://i.imgur.com/SqdzxzF.png | |
| var SolarSystem = function() { | |
| - this.nodes = { | |
| - earth: new Node('Earth'), | |
| - leo: new Node('Low Earth Orbit'), | |
| - geo_transfer: new Node('Geostationary Transfer'), | |
| - geostationary: 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'), | |
| - mars_transfer: new Node('Mars Transfer'), | |
| - deimos_transfer: new Node('Deimos Transfer'), | |
| - low_deimos_orbit: new Node('Low Deimos Orbit'), | |
| - deimos: new Node('Deimos') | |
| - }; | |
| + this.nodes = { | |
| + earth: new Node('Earth'), | |
| + leo: new Node('Low Earth Orbit'), | |
| + geo_transfer: new Node('Geostationary Transfer'), | |
| + geostationary: 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'), | |
| + mars_transfer: new Node('Mars Transfer'), | |
| + 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'), | |
| + }; | |
| - this.edges = { | |
| - low_earth_orbit: newEdge({ deltav: 9400, name: 'low_earth_orbit' }), | |
| - leo_geo_transfer: newEdge({ deltav: 2440, name: 'leo-geo_transfer' }), | |
| - geo_transfer_geo_orbit: newEdge({ deltav: 1470, name: 'geostationary_transfer-geostationary_orbit' }), | |
| - leo_moon_transfer: newEdge({ deltav: 3260, name: 'leo-moon_transfer' }), | |
| - moon_transfer_lmo: newEdge({ deltav: 680, name: 'moon_transfer-low_moon_orbit' }), | |
| - moon_landing: newEdge({ deltav: 1730, name: 'moon-landing' }), | |
| - leo_earth_transfer: newEdge({ deltav: 3210, name: 'leo-earth_transfer' }), | |
| - earth_transfer_mars_transfer: newEdge({ deltav: 1060, name: 'earth_transfer-mars_transfer' }), | |
| - 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' }), | |
| - deimos_landing: newEdge({ deltav: 4, name: 'deimos_landing' }) | |
| - }; | |
| + this.edges = { | |
| + low_earth_orbit: newEdge({ deltav: 9400, name: 'low_earth_orbit' }), | |
| + leo_geo_transfer: newEdge({ deltav: 2440, name: 'leo-geo_transfer' }), | |
| + geo_transfer_geo_orbit: newEdge({ deltav: 1470, name: 'geostationary_transfer-geostationary_orbit' }), | |
| + leo_moon_transfer: newEdge({ deltav: 3260, name: 'leo-moon_transfer' }), | |
| + moon_transfer_lmo: newEdge({ deltav: 680, name: 'moon_transfer-low_moon_orbit' }), | |
| + moon_landing: newEdge({ deltav: 1730, name: 'moon-landing' }), | |
| + leo_earth_transfer: newEdge({ deltav: 3210, name: 'leo-earth_transfer' }), | |
| + earth_transfer_mars_transfer: newEdge({ deltav: 1060, name: 'earth_transfer-mars_transfer' }), | |
| + 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' }), | |
| + deimos_landing: newEdge({ deltav: 4, name: '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'}), | |
| + phobos_landing: newEdge({ deltav: 8, name: 'phobos_landing'}) | |
| + }; | |
| }; | |
| SolarSystem.prototype = { | |
| - unwalkNodes: function() { | |
| - for (var node in this.nodes) { | |
| - this.nodes[node].visited = false; | |
| - } | |
| - }, | |
| + unwalkNodes: function() { | |
| + for (var node in this.nodes) { | |
| + this.nodes[node].visited = false; | |
| + } | |
| + }, | |
| - buildGraph: function(graph, edges, nodes) { | |
| - graph.addEdge(edges.low_earth_orbit, nodes.earth, nodes.leo); | |
| + buildGraph: function(graph, edges, nodes) { | |
| + graph.addEdge(edges.low_earth_orbit, nodes.earth, nodes.leo); | |
| - graph.addEdge(edges.leo_geo_transfer, nodes.leo, nodes.geo_transfer); | |
| - graph.addEdge(edges.geo_transfer_geo_orbit, nodes.geo_transfer, nodes.geostationary); | |
| + graph.addEdge(edges.leo_geo_transfer, nodes.leo, nodes.geo_transfer); | |
| + graph.addEdge(edges.geo_transfer_geo_orbit, nodes.geo_transfer, nodes.geostationary); | |
| - graph.addEdge(edges.leo_moon_transfer, nodes.leo, nodes.moon_transfer); | |
| - graph.addEdge(edges.moon_transfer_lmo, nodes.moon_transfer, nodes.low_moon_orbit); | |
| - graph.addEdge(edges.moon_landing, nodes.low_moon_orbit, nodes.moon); | |
| + graph.addEdge(edges.leo_moon_transfer, nodes.leo, nodes.moon_transfer); | |
| + graph.addEdge(edges.moon_transfer_lmo, nodes.moon_transfer, nodes.low_moon_orbit); | |
| + graph.addEdge(edges.moon_landing, nodes.low_moon_orbit, nodes.moon); | |
| - graph.addEdge(edges.leo_earth_transfer, nodes.leo, nodes.earth_transfer); | |
| - graph.addEdge(edges.earth_transfer_mars_transfer, nodes.earth_transfer, nodes.mars_transfer); | |
| + graph.addEdge(edges.leo_earth_transfer, nodes.leo, nodes.earth_transfer); | |
| + graph.addEdge(edges.earth_transfer_mars_transfer, nodes.earth_transfer, nodes.mars_transfer); | |
| - graph.addEdge(edges.mars_transfer_deimos_transfer, nodes.mars_transfer, nodes.deimos_transfer); | |
| - graph.addEdge(edges.deimos_transfer_low_deimos_orbit, nodes.deimos_transfer, nodes.low_deimos_orbit); | |
| - graph.addEdge(edges.deimos_landing, nodes.low_deimos_orbit, nodes.deimos); | |
| - } | |
| + graph.addEdge(edges.mars_transfer_deimos_transfer, nodes.mars_transfer, nodes.deimos_transfer); | |
| + graph.addEdge(edges.deimos_transfer_low_deimos_orbit, nodes.deimos_transfer, nodes.low_deimos_orbit); | |
| + graph.addEdge(edges.deimos_landing, nodes.low_deimos_orbit, nodes.deimos); | |
| + | |
| + graph.addEdge(edges.mars_transfer_phobos_transfer, nodes.mars_transfer, nodes.phobos_transfer); | |
| + graph.addEdge(edges.phobos_transfer_low_phobos_orbit, nodes.phobos_transfer, nodes.low_phobos_orbit); | |
| + graph.addEdge(edges.phobos_landing, nodes.low_phobos_orbit, nodes.phobos); | |
| + } | |
| }; | |
| module.exports = new SolarSystem(); | |
| diff --git a/js/test/graph.js b/js/test/graph.js | |
| index 9d3e04b..eeb6581 100644 | |
| --- a/js/test/graph.js | |
| +++ b/js/test/graph.js | |
| @@ -7,69 +7,22 @@ var solar_system = require('../maps/solar_system'); | |
| var kerbol_system = require('../maps/kerbol_system'); | |
| describe("checking a graph for adjacency", function(t) { | |
| - t.plan(5); | |
| + t.plan(5); | |
| - var graph = new Graph(); | |
| - var edges = kerbol_system.edges; | |
| - var nodes = kerbol_system.nodes; | |
| + var graph = new Graph(); | |
| + var edges = kerbol_system.edges; | |
| + var nodes = kerbol_system.nodes; | |
| - graph.addEdge(edges.kerbin_lko, nodes.kerbin, nodes.low_kerbin_orbit); | |
| - graph.addEdge(edges.lko_gto, nodes.low_kerbin_orbit, nodes.geostationary_transfer_orbit); | |
| - graph.addEdge(edges.lko_mun_transfer, nodes.low_kerbin_orbit, nodes.mun_transfer); | |
| + graph.addEdge(edges.kerbin_lko, nodes.kerbin, nodes.low_kerbin_orbit); | |
| + graph.addEdge(edges.lko_gto, nodes.low_kerbin_orbit, nodes.geostationary_transfer_orbit); | |
| + graph.addEdge(edges.lko_mun_transfer, nodes.low_kerbin_orbit, nodes.mun_transfer); | |
| - t.true(graph.areAdjacent(nodes.kerbin, nodes.low_kerbin_orbit)); | |
| - t.true(graph.areAdjacent(nodes.low_kerbin_orbit, nodes.geostationary_transfer_orbit)); | |
| - t.true(graph.areAdjacent(nodes.low_kerbin_orbit, nodes.mun_transfer)); | |
| + t.true(graph.areAdjacent(nodes.kerbin, nodes.low_kerbin_orbit)); | |
| + t.true(graph.areAdjacent(nodes.low_kerbin_orbit, nodes.geostationary_transfer_orbit)); | |
| + t.true(graph.areAdjacent(nodes.low_kerbin_orbit, nodes.mun_transfer)); | |
| - t.false(graph.areAdjacent(nodes.kerbin, nodes.geostationary_transfer_orbit)); | |
| - t.false(graph.areAdjacent(nodes.kerbin, nodes.mun_transfer)); | |
| + t.false(graph.areAdjacent(nodes.kerbin, nodes.geostationary_transfer_orbit)); | |
| + t.false(graph.areAdjacent(nodes.kerbin, nodes.mun_transfer)); | |
| - t.end(); | |
| + t.end(); | |
| }); | |
| - | |
| -describe("walking the graph", function(t) { | |
| - var edges = solar_system.edges; | |
| - var nodes = solar_system.nodes; | |
| - | |
| - var graph = new Graph(); | |
| - solar_system.buildGraph(graph, edges, nodes); | |
| - | |
| - describe("walking the solar system delta v graph from earth to mars transfer orbit", function(t) { | |
| - t.plan(1); | |
| - | |
| - solar_system.unwalkNodes(); | |
| - var total_value = graph.walk(nodes.earth, nodes.mars_transfer); | |
| - var expected_value = edges.low_earth_orbit.value + | |
| - edges.leo_earth_transfer.value + | |
| - edges.earth_transfer_mars_transfer.value; | |
| - | |
| - t.equals( | |
| - total_value, | |
| - expected_value | |
| - ); | |
| - t.end(); | |
| - }); | |
| - | |
| - describe("walking the solar system delta v graph from earth to deimos", function(t) { | |
| - t.plan(1); | |
| - | |
| - solar_system.unwalkNodes(); | |
| - var total_value = graph.walk(nodes.earth, nodes.deimos); | |
| - | |
| - var expected_value = edges.low_earth_orbit.value + | |
| - edges.leo_earth_transfer.value + | |
| - edges.earth_transfer_mars_transfer.value + | |
| - edges.mars_transfer_deimos_transfer.value + | |
| - edges.deimos_transfer_low_deimos_orbit.value + | |
| - edges.deimos_landing.value; | |
| - | |
| - t.equals( | |
| - total_value, | |
| - expected_value | |
| - ); | |
| - | |
| - t.end(); | |
| - }); | |
| - | |
| - t.end(); | |
| -}); | |
| \ No newline at end of file | |
| diff --git a/js/test/solar_system.js b/js/test/solar_system.js | |
| new file mode 100644 | |
| index 0000000..b5d8219 | |
| --- /dev/null | |
| +++ b/js/test/solar_system.js | |
| @@ -0,0 +1,60 @@ | |
| +var describe = require('tape'); | |
| +var Graph = require('../graph/graph'); | |
| +var Node = require('../graph/node'); | |
| +var Edge = require('../graph/edge'); | |
| + | |
| +var solar_system = require('../maps/solar_system'); | |
| + | |
| +describe("walking the solar system from earth", function(t) { | |
| + var edges = solar_system.edges; | |
| + var nodes = solar_system.nodes; | |
| + | |
| + var graph = new Graph(); | |
| + solar_system.buildGraph(graph, edges, nodes); | |
| + | |
| + describe("earth to geostationary orbit", function(t) { | |
| + t.plan(1); | |
| + | |
| + solar_system.unwalkNodes(); | |
| + var total_value = graph.walk(nodes.earth, nodes.geostationary); | |
| + var expected_value = edges.low_earth_orbit.value + | |
| + edges.leo_geo_transfer.value + | |
| + edges.geo_transfer_geo_orbit.value; | |
| + | |
| + t.equals(total_value, expected_value); | |
| + t.end(); | |
| + }); | |
| + | |
| + describe("earth to mars transfer orbit", function(t) { | |
| + t.plan(1); | |
| + | |
| + solar_system.unwalkNodes(); | |
| + var total_value = graph.walk(nodes.earth, nodes.mars_transfer); | |
| + var expected_value = edges.low_earth_orbit.value + | |
| + edges.leo_earth_transfer.value + | |
| + edges.earth_transfer_mars_transfer.value; | |
| + | |
| + t.equals(total_value, expected_value); | |
| + t.end(); | |
| + }); | |
| + | |
| + describe("earth to deimos", function(t) { | |
| + t.plan(1); | |
| + | |
| + solar_system.unwalkNodes(); | |
| + var total_value = graph.walk(nodes.earth, nodes.deimos); | |
| + | |
| + var expected_value = edges.low_earth_orbit.value + | |
| + edges.leo_earth_transfer.value + | |
| + edges.earth_transfer_mars_transfer.value + | |
| + edges.mars_transfer_deimos_transfer.value + | |
| + edges.deimos_transfer_low_deimos_orbit.value + | |
| + edges.deimos_landing.value; | |
| + | |
| + t.equals(total_value, expected_value); | |
| + | |
| + t.end(); | |
| + }); | |
| + | |
| + t.end(); | |
| +}); | |
| diff --git a/package.json b/package.json | |
| index 5bd9d3b..8bff901 100644 | |
| --- a/package.json | |
| +++ b/package.json | |
| @@ -5,7 +5,8 @@ | |
| "main": "gulpfile.js", | |
| "repository": "https://github.com/hoorayimhelping/delta-v", | |
| "scripts": { | |
| - "test": "gulp test" | |
| + "test": "gulp test", | |
| + "build": "gulp build" | |
| }, | |
| "author": "Bucky Schwarz", | |
| "license": "MIT", |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment