Advertisement
quetzelcoatlus

14.c

Dec 14th, 2022 (edited)
767
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_WIDTH 1000
  6. #define MAX_HEIGHT 200
  7. #define PRINT
  8.  
  9. void main(){
  10.     char tab[MAX_WIDTH][MAX_HEIGHT];
  11.  
  12.     for(int i=0;i<MAX_WIDTH;i++)
  13.         for(int j=0;j<MAX_HEIGHT;j++)
  14.             tab[i][j]='.';
  15.  
  16.     tab[500][0] = '+';
  17.  
  18.     int dx1,dy1,dx2,dy2, maxy=-1;
  19.     while(scanf("%d,%d",&dx1,&dy1) == 2){
  20.         while(scanf(" -> %d,%d",&dx2,&dy2) == 2){
  21.             if(dy1>maxy) maxy=dy1;
  22.             if(dy2>maxy) maxy=dy2;
  23.             if(dx1<=dx2) for(int i=dx1;i<=dx2;i++) tab[i][dy1]='#';
  24.             if(dx1>=dx2) for(int i=dx1;i>=dx2;i--) tab[i][dy1]='#';
  25.             if(dy1<=dy2) for(int i=dy1;i<=dy2;i++) tab[dx1][i]='#';
  26.             if(dy1>=dy2) for(int i=dy1;i>=dy2;i--) tab[dx1][i]='#';
  27.             dx1=dx2;
  28.             dy1=dy2;
  29.         }
  30.     }
  31.  
  32.     for(int i=0;i<MAX_WIDTH;i++) tab[i][maxy+2]='#';
  33.  
  34.     int fell=0,k=0,sx=500,sy=0,part1=0;
  35.     while(!fell){
  36.         if(tab[sx][sy+1] == '.'){
  37.             sy++;
  38.         } else if(tab[sx-1][sy+1] == '.'){
  39.             sx--;
  40.             sy++;
  41.         } else if(tab[sx+1][sy+1] == '.'){
  42.             sx++;
  43.             sy++;
  44.         } else {
  45.             tab[sx][sy]='o';
  46.             k++;
  47.             sx=500;
  48.             sy=0;
  49.         }
  50.         if(sy==maxy && part1==0) part1=k;
  51.         if(tab[500][0]=='o') fell=1;
  52.     }
  53.  
  54. #ifdef PRINT
  55.     int maxx=-1, minx=MAX_WIDTH;
  56.     for(int i=0;i<MAX_WIDTH;i++){
  57.         for(int j=0;j<maxy+1;j++){
  58.             if(tab[i][j]=='o' && i>maxx) maxx=i;
  59.             if(tab[i][j]=='o' && i<minx) minx=i;
  60.         }
  61.     }
  62.  
  63.     for(int j=0;j<=maxy+2;j++){
  64.         for(int i=minx;i<=maxx;i++)
  65.             printf("%c",tab[i][j]);
  66.         printf("\n");
  67.     }
  68. #endif
  69.  
  70.     printf("Part 1 = %d\n",part1);
  71.     printf("Part 2 = %d\n",k);
  72. }
Tags: adventofcode
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement