#define X write(1,&F,1);write(1,&i,1);write(1,&z,1);write(1,&z,1);
#define Y write(1,&B,1);write(1,&u,1);write(1,&z,1);write(1,&z,1);
//Xはprintf("Fizz");、Yはprintf("Buzz");とほぼ同じ
char *strrev(char *s){//文字列を反転させる
char *ret = s;
char *t = s;
char c;
while( *t != '\ 0' )
t++;
t--;
while(t > s) {
c = *s;
*s = *t;
*t = c;
s++;
t--;
}
return ret;
}
void itoa(int value, char *buff){//itoa
char *p;
int mod;
if( 0 > value ) {
*buff++ = '-';
value = -value;
}
p = buff;
do{
mod = value % 10 + 48;
*p++ = (char)mod;
value /= 10;
}while(value);
*p = '\ 0';
strrev(buff);
}
int main(void){
int j;
int k;
char F='F';
char B='B';
char i='i';
char u='u';
char z='z';
char N=0x0A;//改行コード
char buf[16];
//こっからなぜか崩れる(´・ω・`)ショボーン
for(j=1;j<=100;j++){//1から100まで if(j%15==0){ X Y }else if(j%5==0){ Y }else if(j%3==0){ X }else{ itoa(j,buf); for(k=0;buf[k] != '\ 0';k++){ write(1,&buf[k],1); } } write(1,&N,1); } return 0; }
2009/07/03
fizzbuzz
2009/6/30のエントリで
ソースコードが一文字のHello,world!を作りましたが
今回はfizzbuzzに挑戦して見ました
ソースコードfizzbuzz.cの内容は
前回と同じく
A
のみ
肝心のコンパイラオプションは
gcc -DI="char *strrev(char *s){char *ret = s;char *t = s;char c;while( *t != '\ 0' )t++;t--;while(t > s) {c = *s;*s = *t;*t = c;s++;t--;}return ret;}void itoa(int value, char *buff){char *p;int mod;if( 0 > value ) {*buff++ = '-';value = -value;}p = buff;do{mod = value % 10 + 48;*p++ = (char)mod;value /= 10;}while(value);*p = '\ 0'; strrev(buff); }" -DX="write(1,&F,1);write(1,&i,1);write(1,&z,1);write(1,&z,1);" -DY="write(1,&B,1);write(1,&u,1);write(1,&z,1);write(1,&z,1);" -DA="I int main(void){int j;int k;char F='F';char B='B';char i='i';char u='u';char z='z';char N=0x0A;char buf[16];for(j=1;j<=100;j++){if(j%15==0){X Y}else if(j%5==0){Y}else if(j%3==0){X}else{itoa(j,buf);for(k=0;buf[k] != '\ 0';k++){write(1,&buf[k],1);}}write(1,&N,1);}return 0;} " fizzbuzz.c
です
マクロIの部分は
http://oshiete1.goo.ne.jp/qa3355671.htmlの10番の回答を
勝手に使わさせてもらいました
前回!が使えない的な事を言いましたが
なんか全部使えないわけじゃなさそうです
文字の次に!があるのがだめなのか?
スペースをいれればいけるのか?
書き下したコードをのせようと思いましたが
のせるとなぜか全体のプロポーションが崩れるので
別にします
このエントリに
http://tyosasurainootaku.blogspot.com/2009/07/fizzbuzzc.html
↑でも大分崩れてますけど
関係無いけど
こんなふうにソースコードが一文字で
コンパイラオプションでするプログラミングの事を
一文字(ひともじ)プログラミングとでも名付けようか
ソースコードが一文字のHello,world!を作りましたが
今回はfizzbuzzに挑戦して見ました
ソースコードfizzbuzz.cの内容は
前回と同じく
A
のみ
肝心のコンパイラオプションは
gcc -DI="char *strrev(char *s){char *ret = s;char *t = s;char c;while( *t != '\ 0' )t++;t--;while(t > s) {c = *s;*s = *t;*t = c;s++;t--;}return ret;}void itoa(int value, char *buff){char *p;int mod;if( 0 > value ) {*buff++ = '-';value = -value;}p = buff;do{mod = value % 10 + 48;*p++ = (char)mod;value /= 10;}while(value);*p = '\ 0'; strrev(buff); }" -DX="write(1,&F,1);write(1,&i,1);write(1,&z,1);write(1,&z,1);" -DY="write(1,&B,1);write(1,&u,1);write(1,&z,1);write(1,&z,1);" -DA="I int main(void){int j;int k;char F='F';char B='B';char i='i';char u='u';char z='z';char N=0x0A;char buf[16];for(j=1;j<=100;j++){if(j%15==0){X Y}else if(j%5==0){Y}else if(j%3==0){X}else{itoa(j,buf);for(k=0;buf[k] != '\ 0';k++){write(1,&buf[k],1);}}write(1,&N,1);}return 0;} " fizzbuzz.c
です
マクロIの部分は
http://oshiete1.goo.ne.jp/qa3355671.htmlの10番の回答を
勝手に使わさせてもらいました
前回!が使えない的な事を言いましたが
なんか全部使えないわけじゃなさそうです
文字の次に!があるのがだめなのか?
スペースをいれればいけるのか?
書き下したコードをのせようと思いましたが
のせるとなぜか全体のプロポーションが崩れるので
別にします
このエントリに
http://tyosasurainootaku.blogspot.com/2009/07/fizzbuzzc.html
↑でも大分崩れてますけど
関係無いけど
こんなふうにソースコードが一文字で
コンパイラオプションでするプログラミングの事を
一文字(ひともじ)プログラミングとでも名付けようか
登録:
投稿 (Atom)
