Loading source/solver.c 0 → 100644 +162 −0 Changes for source/solver.c: 162 added lines, 0 removed lines. Original line number Diff line number Diff line /* solver.c */ /* Last Change: 2018/07/09 (Mon) 15:54:41. */ #include<stdio.h> /* #include<stdlib.h> */ #include<string.h> /* #include<limits.h> */ /* #include<math.h> */ /* #include<time.h> */ int board[8][72][72]; int depth,height,width; int lines; //z,y,x void reset(void){ int i,j,k; for(i=0;i<depth;i++) for(j=0;j<height;j++) for(k=0;k<width;k++) board[i][j][k]=0; return; } void read(void){ int x,y,z,i; char c,str[8]; scanf(" %s",str); //SIZE scanf(" %d",&width); if(width>72||width<=0) printf("Error: width\n"); scanf(" %c",&c); //X scanf(" %d",&height); if(height>72||height<=0) printf("Error: height\n"); scanf(" %c",&c); //X scanf(" %d",&depth); if(depth>8||depth<=0) printf("Error: depth\n"); scanf(" %s",str); //LINE_NUM scanf(" %d",&lines); if(lines<=0) printf("Error: lines\n"); for(i=1;i<=lines;i++){ scanf(" %s",str); //LINE#X scanf(" %c",&c); //( scanf(" %d",&x); if(x>=72||x<0) printf("Error: x\n"); scanf(" %c",&c); //, scanf(" %d",&y); if(y>=72||y<0) printf("Error: y\n"); scanf(" %c",&c); //, scanf(" %d",&z); if(z>=72||z<0) printf("Error: z\n"); scanf(" %c",&c); //) board[z-1][y][x]=-i; scanf("%c",&c); //) /* scanf(" %[ -]",&c); //space or - */ scanf(" %c",&c); //( scanf(" %d",&x); if(x>=72||x<0) printf("Error: x\n"); scanf(" %c",&c); //, scanf(" %d",&y); if(y>=72||y<0) printf("Error: y\n"); scanf(" %c",&c); //, scanf(" %d",&z); if(z>=72||z<0) printf("Error: z\n"); scanf(" %c",&c); //) board[z-1][y][x]=-i; } return; } int order(int num){ //1-lines -> 1-lines return num; } int connected(int line){ int i,j,k; for(i=0;i<depth;i++) for(j=0;j<height;j++) for(k=0;k<width;k++) if(board[i][j][k]==line) return 1; return 0; } int connectable(int linea,int lineb){ //REQUIRED return 0; } void actuallyconnect(int num){ //REQUIRED return; } void delete(int line){ int i,j,k; for(i=0;i<depth;i++) for(j=0;j<height;j++) for(k=0;k<width;k++) if(board[i][j][k]==line) board[i][j][k]=0; return; } void connect(int num){ int i; if(connectable(order(num),0)) actuallyconnect(order(num)); else for(i=num-1;i>=1;i--) if(connectable(order(num),order(i))){ delete(order(i)); actuallyconnect(order(num)); connect(i); } return; } void solve(void){ int i; for(i=1;i<=lines;i++) connect(i); return; } void write(void){ int i,j,k; printf("SIZE %dX%dX%d\n",width,height,depth); for(k=0;k<depth;k++){ printf("LAYER %d\n",k+1); for(j=0;j<height;j++){ for(i=0;i<width-1;i++){ if(board[k][j][i]<0) board[k][j][i]=-board[k][j][i]; printf("%d,",board[k][j][i]); } if(board[k][j][i]<0) board[k][j][i]=-board[k][j][i]; printf("%d",board[k][j][i]); printf("\n"); } } return; } int main(void){ reset(); read(); solve(); write(); return 0; } Loading
source/solver.c 0 → 100644 +162 −0 Changes for source/solver.c: 162 added lines, 0 removed lines. Original line number Diff line number Diff line /* solver.c */ /* Last Change: 2018/07/09 (Mon) 15:54:41. */ #include<stdio.h> /* #include<stdlib.h> */ #include<string.h> /* #include<limits.h> */ /* #include<math.h> */ /* #include<time.h> */ int board[8][72][72]; int depth,height,width; int lines; //z,y,x void reset(void){ int i,j,k; for(i=0;i<depth;i++) for(j=0;j<height;j++) for(k=0;k<width;k++) board[i][j][k]=0; return; } void read(void){ int x,y,z,i; char c,str[8]; scanf(" %s",str); //SIZE scanf(" %d",&width); if(width>72||width<=0) printf("Error: width\n"); scanf(" %c",&c); //X scanf(" %d",&height); if(height>72||height<=0) printf("Error: height\n"); scanf(" %c",&c); //X scanf(" %d",&depth); if(depth>8||depth<=0) printf("Error: depth\n"); scanf(" %s",str); //LINE_NUM scanf(" %d",&lines); if(lines<=0) printf("Error: lines\n"); for(i=1;i<=lines;i++){ scanf(" %s",str); //LINE#X scanf(" %c",&c); //( scanf(" %d",&x); if(x>=72||x<0) printf("Error: x\n"); scanf(" %c",&c); //, scanf(" %d",&y); if(y>=72||y<0) printf("Error: y\n"); scanf(" %c",&c); //, scanf(" %d",&z); if(z>=72||z<0) printf("Error: z\n"); scanf(" %c",&c); //) board[z-1][y][x]=-i; scanf("%c",&c); //) /* scanf(" %[ -]",&c); //space or - */ scanf(" %c",&c); //( scanf(" %d",&x); if(x>=72||x<0) printf("Error: x\n"); scanf(" %c",&c); //, scanf(" %d",&y); if(y>=72||y<0) printf("Error: y\n"); scanf(" %c",&c); //, scanf(" %d",&z); if(z>=72||z<0) printf("Error: z\n"); scanf(" %c",&c); //) board[z-1][y][x]=-i; } return; } int order(int num){ //1-lines -> 1-lines return num; } int connected(int line){ int i,j,k; for(i=0;i<depth;i++) for(j=0;j<height;j++) for(k=0;k<width;k++) if(board[i][j][k]==line) return 1; return 0; } int connectable(int linea,int lineb){ //REQUIRED return 0; } void actuallyconnect(int num){ //REQUIRED return; } void delete(int line){ int i,j,k; for(i=0;i<depth;i++) for(j=0;j<height;j++) for(k=0;k<width;k++) if(board[i][j][k]==line) board[i][j][k]=0; return; } void connect(int num){ int i; if(connectable(order(num),0)) actuallyconnect(order(num)); else for(i=num-1;i>=1;i--) if(connectable(order(num),order(i))){ delete(order(i)); actuallyconnect(order(num)); connect(i); } return; } void solve(void){ int i; for(i=1;i<=lines;i++) connect(i); return; } void write(void){ int i,j,k; printf("SIZE %dX%dX%d\n",width,height,depth); for(k=0;k<depth;k++){ printf("LAYER %d\n",k+1); for(j=0;j<height;j++){ for(i=0;i<width-1;i++){ if(board[k][j][i]<0) board[k][j][i]=-board[k][j][i]; printf("%d,",board[k][j][i]); } if(board[k][j][i]<0) board[k][j][i]=-board[k][j][i]; printf("%d",board[k][j][i]); printf("\n"); } } return; } int main(void){ reset(); read(); solve(); write(); return 0; }