forked from skygragon/leetcode-cli
-
Notifications
You must be signed in to change notification settings - Fork 51
/
Copy pathsubmit.js
114 lines (94 loc) · 3.46 KB
/
submit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
'use strict';
var util = require('util');
var h = require('../helper');
var file = require('../file');
var chalk = require('../chalk');
var log = require('../log');
var core = require('../core');
var session = require('../session');
const cmd = {
command: 'submit <filename>',
aliases: ['push', 'commit'],
desc: 'Submit code',
builder: function(yargs) {
return yargs
.positional('filename', {
type: 'string',
describe: 'Code file to submit',
default: ''
})
.example(chalk.yellow('leetcode submit 1.two-sum.cpp'), 'Submit code');
}
};
function printResult(actual, k) {
if (!actual.hasOwnProperty(k)) return;
const v = actual[k] || '';
const lines = Array.isArray(v) ? v : [v];
for (let line of lines) {
if (k !== 'state') line = k + ': ' + line;
log.info(' ' + h.prettyText(' ' + line, actual.ok));
}
}
function printLine() {
const args = Array.from(arguments);
const actual = args.shift();
const line = util.format.apply(util, args);
log.info(' ' + h.prettyText(' ' + line, actual.ok));
}
cmd.handler = function(argv) {
session.argv = argv;
if (!file.exist(argv.filename))
return log.fatal('File ' + argv.filename + ' not exist!');
const meta = file.meta(argv.filename);
core.getProblem(meta.id, function(e, problem) {
if (e) return log.fail(e);
problem.file = argv.filename;
problem.lang = meta.lang;
core.submitProblem(problem, function(e, results) {
if (e) return log.fail(e);
const result = results[0];
printResult(result, 'state');
printLine(result, '%d/%d cases passed (%s)',
result.passed, result.total, result.runtime);
if (result.ok) {
session.updateStat('ac', 1);
session.updateStat('ac.set', problem.fid);
(function () {
if (result.runtime_percentile)
printLine(result, 'Your runtime beats %d %% of %s submissions',
result.runtime_percentile.toFixed(2), result.lang);
else
return log.warn('Failed to get runtime percentile.');
if (result.memory && result.memory_percentile)
printLine(result, 'Your memory usage beats %d %% of %s submissions (%s)',
result.memory_percentile.toFixed(2), result.lang, result.memory);
else
return log.warn('Failed to get memory percentile.');
})();
// core.getSubmission({id: result.id}, function(e, submission) {
// if (e || !submission || !submission.distributionChart)
// return log.warn('Failed to get submission beat ratio.');
// const lang = submission.distributionChart.lang;
// const scores = submission.distributionChart.distribution;
// const myRuntime = parseFloat(result.runtime);
// let ratio = 0.0;
// for (let score of scores) {
// if (parseFloat(score[0]) > myRuntime)
// ratio += parseFloat(score[1]);
// }
// printLine(result, 'Your runtime beats %d %% of %s submissions',
// ratio.toFixed(2), lang);
// });
} else {
printResult(result, 'error');
printResult(result, 'testcase');
printResult(result, 'answer');
printResult(result, 'expected_answer');
printResult(result, 'stdout');
}
// update this problem status in local cache
core.updateProblem(problem, {state: (result.ok ? 'ac' : 'notac')});
});
});
};
module.exports = cmd;