CodeGolf - 7세그먼트 출력
2009/07/17 10:01
코드골프에 올라와있던 문제.
http://codegolf.com/seven-segment-displays
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define l(x) (int)(pow(10,x)+0.5)
#define a(x) ((n[m%l(j+1)/l(j)]>>d+x)&0x01)
#define p(x) printf(x)
#define c(x) case x:
int main(void){
char n[]={119,36,93,109,46,107,123,37,127,111};int i,j,d,m;char s[11];
p("->");scanf("%s",s);m=atoi(s);
for(i=0;i<9;i++,p("\n")){
for(j=strlen(s)-1;j>=0;j--){d=0;
switch(i){
c(0)c(4)c(8)d=i==0?0:i==4?3:i==8?6:0;a(0)?p(" *** "):p(" ");break;
c(5)c(6)c(7)d=3;
default:a(1)?p("* "):p(" ");a(2)?p("* "):p(" ");
}}}return 0;
}
이 코드가 프갤에 올려놓았던 것이었고..
디- 가 ANSI-C표준을 이용해 200byte대로 확 줄여버리면서 내가 버로우 탔음.
역시 변태코드를 양산하기엔 C99보단 ANSI C 인가..
디 -의 246byte 코드
char s[99],*p,k;int g[]={78,82,0,-35,422,92,-50};T(x,M,m,z){
printf("%s %c",g[x]-97&1<<*p-48?M:m,p[1]?32:z);}V(x)
{while(++k%5)for(p=s;*p;++p)k%5-1?x<6?T(x+1,"* "," ",32),
T(x+2,"*"," ",10):0:T(x," *** "," ",10);}
main(){gets(s);V(0);V(3);V(6);}

