forked from skygragon/leetcode-cli
-
Notifications
You must be signed in to change notification settings - Fork 51
/
Copy pathsubmit.js
100 lines (81 loc) · 2.87 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
var util = require('util');
var _ = require('underscore');
var log = require('loglevel');
var core = require('../core');
var h = require('../helper');
var cmd = {
command: 'submit <filename>',
desc: 'submit final solution to leetcode',
builder: {
}
};
var INDENT = ' ';
cmd.handler = function(argv) {
// use the 1st section in filename as keyword
// e.g. two-sum.cpp, or two-sum.78502271.ac.cpp
var keyword = h.getFilename(argv.filename).split('.')[0];
core.getProblem(keyword, function(e, problem) {
if (e) return log.fail(e);
problem.file = argv.filename;
core.submitProblem(problem, function(e, results) {
if (e) return log.fail(e);
var result = results[0];
var ok = (result.status_code === 10) &&
(result.total_correct === result.total_testcases);
var runOk = result.run_success;
var line = util.format(' %s', h.statusToName(result.status_code));
log.info(INDENT + h.prettyText(line, ok));
// show "xxx_error" message
_.chain(result)
.pick(function(v, k, obj) {
return /_error$/.test(k) && v.length > 0;
})
.values()
.each(function(v) {
log.info(INDENT + h.prettyText(' ' + v, ok));
});
// show success ratio
line = util.format(' %d/%d cases passed (%s)',
result.total_correct,
result.total_testcases,
result.status_runtime);
log.info(INDENT + h.prettyText(line, ok));
// show beat ratio
if (ok) {
core.getSubmission({id: result.id}, function(e, submission) {
if (submission.distributionChart) {
var beatRatio = 0.0;
var chart = submission.distributionChart.distribution;
var lang = submission.distributionChart.lang;
for (var i in chart) {
if (parseFloat(chart[i][0]) <= parseFloat(result.display_runtime)) {
continue;
} else {
beatRatio += parseFloat(chart[i][1]);
}
}
line = util.format(' Your runtime beats %d %% of %s submissions',
beatRatio.toFixed(2),
lang);
log.info(INDENT + h.prettyText(line, ok));
}
});
}
// show testcase
var testcase = result.input || result.last_testcase;
if (!ok && testcase) {
line = util.format(' testcase: %s', util.inspect(testcase));
log.info(INDENT + h.prettyText(line, ok));
}
if (!ok && runOk) {
line = util.format(' output: %s', result.code_output);
log.info(INDENT + h.prettyText(line, ok));
line = util.format(' expected: %s', result.expected_output);
log.info(INDENT + h.prettyText(line, ok));
}
// update this problem status in local cache
core.updateProblem(problem, {state: (ok ? 'ac' : 'notac')});
});
});
};
module.exports = cmd;