Skip to content

Instantly share code, notes, and snippets.

@hoorayimhelping
Created December 20, 2015 17:01
Show Gist options
  • Select an option

  • Save hoorayimhelping/119d5d53bac8f9750e00 to your computer and use it in GitHub Desktop.

Select an option

Save hoorayimhelping/119d5d53bac8f9750e00 to your computer and use it in GitHub Desktop.
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