1
1
var log = require ( 'loglevel' ) ;
2
2
var sprintf = require ( 'sprintf-js' ) . sprintf ;
3
+ var _ = require ( 'underscore' ) ;
3
4
4
5
var chalk = require ( '../chalk' ) ;
5
6
var core = require ( '../core' ) ;
@@ -8,6 +9,12 @@ var cmd = {
8
9
command : 'stat' ,
9
10
desc : 'show statistics' ,
10
11
builder : {
12
+ graph : {
13
+ alias : 'g' ,
14
+ type : 'boolean' ,
15
+ default : false ,
16
+ describe : 'Show graphic statistics'
17
+ }
11
18
}
12
19
} ;
13
20
@@ -53,11 +60,47 @@ function showSummary(problems) {
53
60
log . info ( prettyLine ( 'Hard' , statsNoLock . acHard , statsNoLock . allHard ) ) ;
54
61
}
55
62
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
+
56
95
cmd . handler = function ( argv ) {
57
96
core . getProblems ( function ( e , problems ) {
58
97
if ( e ) return log . fail ( e ) ;
59
98
60
- showSummary ( problems ) ;
99
+ if ( argv . graph ) {
100
+ showGraph ( problems ) ;
101
+ } else {
102
+ showSummary ( problems ) ;
103
+ }
61
104
} ) ;
62
105
} ;
63
106
0 commit comments