11var log = require('loglevel');
22var sprintf = require('sprintf-js').sprintf;
3+ var _ = require('underscore');
34
45var chalk = require('../chalk');
56var core = require('../core');
@@ -8,6 +9,12 @@ var cmd = {
89 command: 'stat',
910 desc: 'show statistics',
1011 builder: {
12+ graph: {
13+ alias: 'g',
14+ type: 'boolean',
15+ default: false,
16+ describe: 'Show graphic statistics'
17+ }
1118 }
1219};
1320
@@ -53,11 +60,47 @@ function showSummary(problems) {
5360 log.info(prettyLine('Hard', statsNoLock.acHard, statsNoLock.allHard));
5461}
5562
63+ function showGraph(problems) {
64+ var graph = [];
65+ _.each(problems, function(problem) {
66+ if (problem.state === 'ac') {
67+ graph[problem.id] = chalk.green('█');
68+ } else if (problem.state === 'notac') {
69+ graph[problem.id] = chalk.red('▓');
70+ } else {
71+ graph[problem.id] = '░';
72+ }
73+ });
74+
75+ log.info(sprintf('%13d%13d%13d%13d%13d', 10, 20, 30, 40, 50));
76+
77+ var line = [sprintf(' %03d ', 1)];
78+ for (var i = 1, n = graph.length; i < n; ++i) {
79+ line.push(graph[i] || ' ');
80+ if (i % 10 === 0) line.push(' ');
81+ if (i % 50 === 0 || i === n) {
82+ log.info(line.join(''));
83+ line = [sprintf(' %03d ', i)];
84+ }
85+ }
86+
87+ log.info();
88+ log.info(sprintf('%7s%s%3s%s%3s%s',
89+ ' ', chalk.green('█ Accepted'),
90+ ' ', chalk.red('▓ Not Accepted'),
91+ ' ', '░ Remaining'));
92+ log.info();
93+ }
94+
5695cmd.handler = function(argv) {
5796 core.getProblems(function(e, problems) {
5897 if (e) return log.fail(e);
5998
60- showSummary(problems);
99+ if (argv.graph) {
100+ showGraph(problems);
101+ } else {
102+ showSummary(problems);
103+ }
61104 });
62105};
63106
0 commit comments