euler
Version:
a commandline tool for greasing up your rusty programming and math skills through Project Euler challenges.
87 lines (68 loc) • 2.12 kB
JavaScript
var fs = require('fs');
var find = require('./finder');
var get = require('./getter');
var marks = {
coffee: '#',
js: '//'
};
var solutions = {
coffee: '# solution\n',
js: '/* solution */;\n'
};
var getPrompt = function(data, suffix, number) {
var prompt, mark, output;
prompt = data.split('\n\n\n')[+number - 1]; // remove leading zeros
mark = marks[suffix];
if (prompt && suffix) {
prompt = mark + ' ' + prompt.split('\n').join('\n' + mark + ' ') +
'\n\n\n\n' + mark + ' TODO: return your answer for this prompt.' +
'\nreturn ' + solutions[suffix];
}
return prompt;
};
var copy = function(from, to, failure) {
fs.createReadStream(from + to).pipe(fs.createWriteStream(to));
};
var write = function(success, failure, suffix, number, prompt) {
var file, data, resources, i;
// write current prompt
file = 'euler_' + number + '.' + suffix;
fs.writeFileSync(file, prompt, 'utf8');
// if any resources exist, write them also
resources = get.data(__dirname + '/../data/resources.json', failure);
resources = JSON.parse(resources)[+number];
if (resources) {
if (Array.isArray(resources)) {
for (i = 0; i < resources.length; i++) {
copy(__dirname + '/../data/resources/', resources[i], failure);
}
} else {
copy(__dirname + '/../data/resources/', resources, failure);
}
}
success(prompt);
};
var generateOutput = function(success, failure, suffix, number) {
var data, prompt;
number = number ? number : find.highest();
data = get.data(__dirname + '/../data/problems.txt', failure, number);
if (data) {
prompt = getPrompt(data, suffix, number);
if (prompt) {
success(prompt);
} else {
failure();
}
}
};
var generate = {};
generate.preview = function(success, failure, number) {
generateOutput(success, failure, null, number);
};
generate.file = function(success, failure, suffix, number) {
var writer;
writer = write.bind(null, success, failure, suffix, number);
generateOutput(writer, failure, suffix, number);
};
module.exports = generate;
;