quetzelcoatlus

11b.c

Dec 11th, 2022 (edited)
828
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.87 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define ROUNDS 10000
  5. #define N 10
  6.  
  7. void main(){
  8.     long int item[N][200],mul=1;
  9.     int p[N]={0},ins[N]={0};
  10.     char op[N];
  11.     int val[N],div[N],tru[N],fals[N];
  12.  
  13.     int m=0,j;
  14.     char c, tmp[N];
  15.     while(scanf("Monkey %d:\n", &j) == 1){
  16.         scanf("Starting items: ");
  17.         while(scanf("%d, ",&j) == 1)
  18.             item[m][p[m]++]=j;
  19.  
  20.         scanf("Operation: new = old %c %s\n",&c,tmp);
  21.         if(!strcmp("old",tmp)){
  22.             op[m]= c == '+' ? 2 : 3;
  23.         } else {
  24.             op[m]= c == '+' ? 0 : 1;
  25.             sscanf(tmp,"%d",&(val[m]));
  26.         }
  27.  
  28.         scanf("Test: divisible by %d\n",&(div[m]));
  29.         mul*=div[m];
  30.         scanf("If true: throw to monkey %d\n",&(tru[m]));
  31.         scanf("If false: throw to monkey %d\n",&(fals[m]));
  32.  
  33.         m++;
  34.     }
  35.  
  36.     for(int i=1; i<=ROUNDS; i++){
  37.         for(int j=0;j<m;j++){
  38.             for(int k=0; k<p[j];k++){
  39.                 ins[j]++;
  40.                 if(op[j] == 0){
  41.                     item[j][k]+=val[j];
  42.                 } else if(op[j] == 1){
  43.                     item[j][k]*=val[j];
  44.                 } else if(op[j] == 2){
  45.                     item[j][k]+=item[j][k];
  46.                 } else if(op[j] == 3){
  47.                     item[j][k]*=item[j][k];
  48.                 }
  49.                 item[j][k] %= mul;
  50.                 if(!(item[j][k] % div[j]))
  51.                     item[tru[j]][p[tru[j]]++] = item[j][k];
  52.                 else
  53.                     item[fals[j]][p[fals[j]]++] = item[j][k];
  54.             }
  55.             p[j]=0;
  56.         }
  57.     }
  58.  
  59.     long int max=0,max2=0,temp;
  60.     for(int j=0;j<m;j++){
  61.         temp=ins[j];
  62.         if(ins[j]>max){
  63.             temp=max;
  64.             max=ins[j];
  65.         }
  66.         if(temp > max2)
  67.             max2=temp;
  68.     }
  69.  
  70.     printf("max = %ld, max2 = %ld -> %ld\n",max,max2,max*max2);
  71. }
Tags: adventofcode
Advertisement
Add Comment
Please, Sign In to add comment