1102:LC-Display

keyword

C++

概要

数字を指定された大きさのアスキーアートで表現する問題。
実装ゲー。

string str[10][11][40];

int main(){
    for(int i=1; i<=10; i++){
        str[0][i][0] = ' ' + string(i,'-') + ' ';
        str[0][i][i+1] = string(i+2,' ');
        str[0][i][2*(i+1)] = ' ' + string(i,'-') + ' ';
        for(int j=1; j<=i; j++){
            str[0][i][j] = '|' + string(i,' ') + '|';
            str[0][i][j+1+i] = '|' + string(i,' ') + '|';
        }
    }
    for(int i=1; i<=10; i++){
        str[1][i][0] = string(i+2,' ');
        str[1][i][i+1] = string(i+2,' ');
        str[1][i][2*(i+1)] = string(i+2,' ');
        for(int j=1; j<=i; j++){
            str[1][i][j] = ' ' + string(i,' ') + '|';
            str[1][i][j+1+i] = ' ' + string(i,' ') + '|';
        }
    }
    for(int i=1; i<=10; i++){
        str[2][i][0] = ' ' + string(i,'-') + ' ';
        str[2][i][i+1] = ' ' + string(i,'-') + ' ';
        str[2][i][2*(i+1)] = ' ' + string(i,'-') + ' ';
        for(int j=1; j<=i; j++){
            str[2][i][j] = ' ' + string(i,' ') + '|';
            str[2][i][j+1+i] = '|' + string(i,' ') + ' ';
        }
    }
    for(int i=1; i<=10; i++){
        str[3][i][0] = ' ' + string(i,'-') + ' ';
        str[3][i][i+1] = ' ' + string(i,'-') + ' ';
        str[3][i][2*(i+1)] = ' ' + string(i,'-') + ' ';
        for(int j=1; j<=i; j++){
            str[3][i][j] = ' ' + string(i,' ') + '|';
            str[3][i][j+1+i] = ' ' + string(i,' ') + '|';
        }
    }
    for(int i=1; i<=10; i++){
        str[4][i][0] = ' ' + string(i,' ') + ' ';
        str[4][i][i+1] = ' ' + string(i,'-') + ' ';
        str[4][i][2*(i+1)] = ' ' + string(i,' ') + ' ';
        for(int j=1; j<=i; j++){
            str[4][i][j] = '|' + string(i,' ') + '|';
            str[4][i][j+1+i] = ' ' + string(i,' ') + '|';
        }
    }
    for(int i=1; i<=10; i++){
        str[5][i][0] = ' ' + string(i,'-') + ' ';
        str[5][i][i+1] = ' ' + string(i,'-') + ' ';
        str[5][i][2*(i+1)] = ' ' + string(i,'-') + ' ';
        for(int j=1; j<=i; j++){
            str[5][i][j] = '|' + string(i,' ') + ' ';
            str[5][i][j+1+i] = ' ' + string(i,' ') + '|';
        }
    }
    for(int i=1; i<=10; i++){
        str[6][i][0] = ' ' + string(i,'-') + ' ';
        str[6][i][i+1] = ' ' + string(i,'-') + ' ';
        str[6][i][2*(i+1)] = ' ' + string(i,'-') + ' ';
        for(int j=1; j<=i; j++){
            str[6][i][j] = '|' + string(i,' ') + ' ';
            str[6][i][j+1+i] = '|' + string(i,' ') + '|';
        }
    }
    for(int i=1; i<=10; i++){
        str[7][i][0] = ' ' + string(i,'-') + ' ';
        str[7][i][i+1] = ' ' + string(i,' ') + ' ';
        str[7][i][2*(i+1)] = ' ' + string(i,' ') + ' ';
        for(int j=1; j<=i; j++){
            str[7][i][j] = ' ' + string(i,' ') + '|';
            str[7][i][j+1+i] = ' ' + string(i,' ') + '|';
        }
    }
    for(int i=1; i<=10; i++){
        str[8][i][0] = ' ' + string(i,'-') + ' ';
        str[8][i][i+1] = ' ' + string(i,'-') + ' ';
        str[8][i][2*(i+1)] = ' ' + string(i,'-') + ' ';
        for(int j=1; j<=i; j++){
            str[8][i][j] = '|' + string(i,' ') + '|';
            str[8][i][j+1+i] = '|' + string(i,' ') + '|';
        }
    }
    for(int i=1; i<=10; i++){
        str[9][i][0] = ' ' + string(i,'-') + ' ';
        str[9][i][i+1] = ' ' + string(i,'-') + ' ';
        str[9][i][2*(i+1)] = ' ' + string(i,'-') + ' ';
        for(int j=1; j<=i; j++){
            str[9][i][j] = '|' + string(i,' ') + '|';
            str[9][i][j+1+i] = ' ' + string(i,' ') + '|';
        }
    }


    int s, n;
    while(scanf("%d%d",&s,&n),s){
        vector<int> ns;
        if(!n)ns.push_back(0);
        for(;n;n/=10)ns.push_back(n%10);
        reverse(ALL(ns));
        for(int i=0; i<=2*(s+1); i++){
            for(int j=0; j<SZ(ns); j++){
                printf("%s%c", str[ns[j]][s][i].c_str(), (j==SZ(ns)-1)?'\n':' ');
            }
        }
        printf("\n");
    }
    return 0;
}