fork download
  1. #define P B[i][l]
  2. #define m malloc(99)
  3. V,S,J;char**Z,*L,*G,*u;i,j,l,n,H,c;N,M;I(B,h)char**B;{V=strlen(*B);S=J=i=0;Z=m;for(j=h-1;i<-~h/2;i++,j--)for(l=0,n=V-1;l<-~V/2;l++,n--)P-43&&(B[i][l-1]-43&&!i||i&&B[i-1][l]-43&&!l)?H=P,P=B[j][l]=B[i][n]=B[j][n]=32,N=i+l-1,H==45?c=N-(M=j-l+1)?45:61,M<0?L[V]=!memset(Z[J++]=L=m,32,V),L[l]=L[n]=c:(B[N][l]=B[N][n]=B[M][l]=B[M][n]=c):H=='|'?c=N-(M=n-i+1)?'|':34,M>=0?B[i][N]=B[j][N]=B[i][M]=B[j][M]=c:sprintf(B[i]=B[j]=G=m,"|%*s%$1*$3s|",i-n-2,B[i],"")+S++:0:0;for(H=-J;++H<=h+J;N=S+1-strlen(u)/2,printf("%*s\n",N>0?N:0,u))u=H<1?Z[-H]:h/H?B[H-1]:Z[H+~h];}
  4.  
  5. main(){
  6. char b[]="+------+\0| |\0| |\0| |\0| |\0| |\0| |\0| |\0+------+";
  7. char*c[]={b,b+9,b+18,b+27,b+36,b+45,b+54,b+63,b+72};
  8. I(c,9);
  9.  
  10. char d[]="+------------+\0| |\0| |\0+------------+";
  11. char*e[]={d,d+15,d+30,d+45};
  12. I(e,4);
  13. }
Success #stdin #stdout 0s 4504KB
stdin
Standard input is empty
stdout
+-    -+
| -  - |
 | -- | 
  |  |  
   ||   
  |  |  
 | -- | 
| -  - |
+-    -+
      --      
     -  -     
+-  -    -  -+
| --      -- |
| --      -- |
+-  -    -  -+
     -  -     
      --