Cod sursa(job #2262310)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 17 octombrie 2018 10:22:58
Problema A+B Scor 0
Compilator cpp-64 Status done
Runda teme_upb Marime 2.48 kb
#include <cstdio>
#include <cstring>

bool horizontal[11][3]={{1,0,1},{0,0,0},{1,1,1},{1,1,1},{0,1,0},{1,1,1},{1,1,1},{1,0,0},{1,1,1},{1,1,1},{1,0,1}};
bool vertical_first[10][2]={ {1,1},{0,0},{0,1},{0,0},{1,0},{1,0},{1,1},{0,0},{1,1},{1,0}};
bool vertical_second[10][2]={{1,1},{1,1},{1,0},{1,1},{1,1},{0,1},{0,1},{1,1},{1,1},{1,1}};

int n;
int q;

void Draw_line(int s,char *output)
{
 output[q++]=' ';
 for(int i=0;i<s;i++)
     output[q++]='-';
 output[q++]=' ';
 output[q++]=' ';
}

void Draw_empty_line(int s,char *output)
{
 for(int i=0;i<=s+2;i++)
     output[q++]=' ';
}

void Print_lines(int x,int s,char *number,char *output)
{
 for(int i=0;i<n;i++)
     if(horizontal[number[i]-'0'][x])
        Draw_line(s,output);
     else
        Draw_empty_line(s,output);
 q--;
 output[q++]='\n';
}

void Draw_column(bool first,int s,char *output)
{
 output[q++]='|';
 if(first)
    for(int i=0;i<s;i++)
        output[q++]=' ';
 else
    output[q++]=' ';
}

void Draw_empty_column(bool first,int s,char *output)
{
 output[q++]=' ';
 if(first)
    for(int i=0;i<s;i++)
        output[q++]=' ';
 else
    output[q++]=' ';
}

void Print_columns(int x,int s,char *number,char *output)
{
 for(int sq=0;sq<s;sq++)
     {
      for(int i=0;i<n;i++)
          {
           if(vertical_first[number[i]-'0'][x])
              Draw_column(true,s,output);
           else
              Draw_empty_column(true,s,output);

           if(vertical_second[number[i]-'0'][x])
              Draw_column(false,s,output);
           else
              Draw_empty_column(false,s,output);
          }
      q--;
      output[q++]='\n';
     }
}

void Draw(int s,char *number,char *output)
{
 Print_lines(0,s,number,output);
 //fprintf(stderr,"%s\n\n",output);
 Print_columns(0,s,number,output);

 //fprintf(stderr,"%s\n\n",output);
 Print_lines(1,s,number,output);

 //fprintf(stderr,"%s\n\n",output);
 Print_columns(1,s,number,output);

 //fprintf(stderr,"%s\n\n",output);
 Print_lines(2,s,number,output);
}

char buffer[8000];

int main()
{
 //FILE *in=stdin,*out=stdout;
 FILE *in=fopen("a.in","r"),*out=fopen("a.out","w");
 int s;
 char number[20];
 fscanf(in,"%d %s ",&s,number);
 while(s!=0)
       {
        n=strlen(number);
        Draw(s,number,buffer);
        fputs(buffer,out);
        fscanf(in,"%d %s ",&s,number);
        //if(s!=0)
           fprintf(out,"\n");
        q=0;
       }
 fclose(in);
 fclose(out);
 return 0;
}