Advertisement
Guest User

AoC 9 Part 2

a guest
Dec 9th, 2016
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int readint(int* dest){
  5.     char c;
  6.     int rv = 0;
  7.     int nread=0;
  8.     while((c=getchar())!=EOF&&(c >= '0')&&(c <= '9')){
  9.         nread++;
  10.         rv *= 10;
  11.         rv += c - '0';
  12.     }
  13.     ungetc(c, stdin);
  14.     if(c==EOF) return -1;
  15.     *dest=rv;
  16.     return nread;
  17. }
  18.  
  19. unsigned long int psum(int len, int i)
  20. {
  21.     char c;
  22.     unsigned long int rv=0;
  23.     for(;0<len;len--){
  24.         c = getchar();
  25.         if(c == '('){
  26.             int dread = 0;
  27.             int nlen;
  28.             dread += readint(&nlen);
  29.             getchar();dread++;
  30.             int ni;
  31.             dread += readint(&ni);
  32.             getchar();dread++;
  33.             rv += psum(nlen, ni) * i;
  34.             len -= nlen+dread;
  35.         }else{rv += i;}
  36.     }
  37.     return rv;
  38. }
  39.  
  40. int main(int argc, char** argv)
  41. {
  42.     unsigned long int count = 0;
  43.     char c;
  44.     while((c=getchar())!= EOF){
  45.         if(c=='('){
  46.             int len;
  47.             readint(&len);
  48.             getchar();//discard x
  49.             int i;
  50.             readint(&i);
  51.             getchar();//discard )
  52.             count += psum(len, i);
  53.         }else{count++;}
  54.     }
  55.     printf("%lu", count-1); //don't count eof
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement