2
1
Fork 0
aoc2021/10/solution.c

39 lines
1.8 KiB
C
Raw Normal View History

2021-12-10 14:45:50 +01:00
#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 ]);}