Mercurial > repo
annotate src/grph.c @ 7072:53e47c85558e
<oerjan> learn optional.
author | HackBot |
---|---|
date | Thu, 03 Mar 2016 00:05:00 +0000 |
parents | 5339a7aef477 |
children |
rev | line source |
---|---|
6589 | 1 #include "stdio.h" |
2 #include "string.h" | |
3 #include "stdlib.h" | |
4 #include "math.h" | |
5 char *vgraph[] = {" ","▁","▂","▃","▄","▅","▆","▇","█"}; | |
6 char *hgraph[] = {"█","▉","▊","▋","▌","▍","▎","▏"," "}; | |
7 int main(int argc,char**argv){ | |
6591
e2234a3876d1
<fizzie> ` sed -i -e \'s/int h = 3/int h = 1/\' grph.c
HackBot
parents:
6589
diff
changeset
|
8 int h = 1; |
6589 | 9 int w = 80; |
10 int color = 0,ori = 0,zebra=0,label=0; | |
11 if(argc >= 2&&argv[1][0]=='-'){ | |
12 if(strchr(argv[1],'c'))color = 1; | |
13 if(strchr(argv[1],'z'))zebra = 1; | |
14 if(strchr(argv[1],'h'))ori = 1; | |
15 if(strchr(argv[1],'l'))label = 1; | |
16 argv++;argc--; | |
17 } | |
18 if(ori)h=10; | |
19 if(argc >= 2)h = strtol(argv[1],0,0); | |
20 if(argc >= 3)w = strtol(argv[2],0,0); | |
21 float *x=malloc(sizeof(float)*w); | |
22 int i,c,j; | |
23 float M = -HUGE_VALF; | |
24 float m = HUGE_VALF; | |
25 for(i=0;i<w;i++){ | |
26 c=scanf(" %f",x+i); | |
27 if(c<1)break; | |
28 if(x[i]>M)M=x[i]; | |
29 if(x[i]<m)m=x[i]; | |
30 } | |
31 if(argc >= 4)sscanf(argv[3],"%f",&m); | |
32 if(argc >= 5)sscanf(argv[4],"%f",&M); | |
33 w = i; | |
34 float l = (M-m)/h; | |
35 if(ori == 0){//vertical, default | |
36 for(j=h-1;j>=0;j--){ | |
37 if(color)fputs("\e[44m",stdout); | |
38 for(i=0;i<w;i++){ | |
39 float r = x[i]-m-l*j; | |
40 if(zebra)fputs((i%2)?"\e[31m":"\e[32m",stdout); | |
41 if(r>l){ | |
42 fputs(vgraph[8],stdout); | |
43 }else if(r>0){ | |
44 fputs(vgraph[(int)(r/l*8+0.5)],stdout); | |
45 }else{ | |
46 fputs(" ",stdout); | |
47 } | |
48 } | |
49 if(color||zebra)fputs("\e[0m",stdout); | |
50 if(label&&j==h-1)printf(" %f",M); | |
51 if(label&&j==0)printf(" %f",m); | |
52 putchar(10); | |
53 } | |
54 }else{ | |
55 for(i=0;i<w;i++){ | |
56 if(zebra)fputs((i%2)?"\e[31m":"\e[32m",stdout); | |
57 if(color)fputs("\e[44m",stdout); | |
58 for(j=0;j<h;j++){ | |
59 float r = x[i]-m-l*j; | |
60 if(r>l){ | |
61 fputs(hgraph[0],stdout); | |
62 }else if(r>0){ | |
63 fputs(hgraph[8-(int)(r/l*8+0.5)],stdout); | |
64 }else{ | |
65 fputs(hgraph[8],stdout); | |
66 } | |
67 } | |
68 if(color||zebra)fputs("\e[0m",stdout); | |
69 putchar(10); | |
70 } | |
71 int n; | |
72 if(label){ | |
73 printf("%f%n",m,&n); | |
74 while(n++<h-1)putchar(' '); | |
75 printf("▕ %f",M); | |
76 } | |
77 } | |
78 } |