39 lines
1.8 KiB
C
39 lines
1.8 KiB
C
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
char C[]={'(',')','[',']','{',
|
||
|
'}', '<' , '>' };int X[]={3,57,1197,
|
||
|
25137} ;int Q(const void*A,const void*B){
|
||
|
size_t a=*(size_t*)A,b=*(size_t*)B;return a
|
||
|
>b?a<b?-1:0:1;}int main(int H,char**J){if(H<2
|
||
|
)return 1;char*p,*
|
||
|
P,n;size_t L=0,i
|
||
|
,S=0,U=0;FILE*f=
|
||
|
fopen(J[1],"r");
|
||
|
for(;(n=fgetc(f)
|
||
|
)!= EOF ; L+=n==
|
||
|
'\n') ;rewind(f);
|
||
|
size_t G[L];for(
|
||
|
L= 0; fscanf(f,"%"
|
||
|
"ms",&p)==1;L++){char
|
||
|
s[strlen(p)],*B=s;G[L]=0;for(P=p
|
||
|
;*P;P++)for(i=0;i<sizeof(C);i
|
||
|
+=2)if(*P==C[ i])*B++=C[i+
|
||
|
1];else if(*P==C[i+1
|
||
|
])if(B== s||*(B-
|
||
|
1)!=*P){S+=X[i/2
|
||
|
];goto N;}else B
|
||
|
|
||
|
|
||
|
--;if(B!=
|
||
|
s){for(B--;B>=s;B
|
||
|
--)for(i=0; i<sizeof(
|
||
|
C);i+=2)if(*B==C[i+1]){
|
||
|
G[L]=G[ L]*5 +i/2+1;break
|
||
|
;}U++;}N:free(p) ;}qsort(
|
||
|
&G,L,sizeof(size_t),Q);
|
||
|
printf("Silver: %lu\n"
|
||
|
"Gold: %lu\n",S,G
|
||
|
[U/2 ]);}
|