1102 LC-Display
1102 -- LC-Display
1102's Status List
二つの整数の入力値(s,n)に対して、一文字を幅s+2,高さ2s+3にnの電卓表記を拡大して出力する。
縦線は'|'、横線は'-'、それ以外は半角空白で埋め、各数字の後ろに半角スペースを、また全ての数字を出力したら改行を入力する。
(s,n)==(0,0)で終了。
以下コード晒し。
GCCで265byte。
char a[9];i,j,k,t,u,v,y[]={1005,881,927,892,325,1019,877}; main(s){ for(;scanf("%d%s",&s,&a),s++;puts("")) for(i=0,t=s+1;i<s+t;i++,puts("")) for(j=0;u=a[j];j++,putchar(32)) for(k=0,u-=48,v=1<<u;k<t;k++) putchar(i%s?k%s||!(y[k/s+i/s*3+1]&v)?32:'|':k%s&&y[3*i/s]&v?45:32); }
思ったほど減らない。条件節を減らすのはまた今度にしよう。
(追記:2006/06/26 11:38)
241byte。
char a[9];i,j,k,u,v,y[]={18,142,96,131,698,4,146}; main(s){ for(;scanf("%d%s",&s,&a),s++;puts("")) for(i=0;i<=s*2;i++,puts("")) for(j=0;u=a[j];j++) for(k=0,u-=48,v=1<<u;k<s+2;k++) putchar(i%s?k%s|y[k/s+i/s*3+1]&v?32:'|':!k|k>=s|y[3*i/s]&v?32:45); }