@toku51n様のfoobarをフォークしていろいろ遊んでみた時の記録。
もう一つ、結果を文字列に埋め込んだ奴があるけどリンクコピーミスで分からん。 ideoneでフォーク結果一覧ってどうやったら見れるの?と言うか見れなくね?
| #include <stdio.h> | |
| #include <stdlib.h> | |
| void cont(){}; | |
| void end(){ | |
| exit(0); | |
| } | |
| int main(void) { | |
| void (*f[])() = { cont, end }; | |
| int i = 1; | |
| char r[4][9] = {"","Fizz\n","Buzz\n","FizzBuzz\n"}; | |
| loop_start: | |
| sprintf(r[0],"%d\n",i); | |
| printf(r[(3-i%3)/3+(5-i%5)/5*2]); | |
| f[i/100](); | |
| i++; | |
| goto loop_start; | |
| } | |
| //https://ideone.com/T56UtK | |
| //別にスマートにはなっていないが、まぁ常識的にはこうする。 | |
| //Cプログラミングとかいつ振りかわからんが、これくらいなら難しくもないな。 |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| void cont(){}; | |
| void end(){ | |
| exit(0); | |
| } | |
| int main(void) { | |
| void (*f[])() = { cont, end }; | |
| int i = 1; | |
| char r[14] = "\0\0\0\0FizzBuzz\0"; | |
| loop_start: | |
| sprintf(r,"%d",i); | |
| r[8]=(5-i%5)/5*'B'; | |
| printf(r+4*(((3-i%3)/3+(5-i%5)/5*2)-2*((3-i%3)/3)*((5-i%5)/5))); | |
| printf("\n"); | |
| f[i/100](); | |
| i++; | |
| goto loop_start; | |
| } | |
| //https://ideone.com/TT4OFx | |
| //\0は0だと仮定。 |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| void cont(){}; | |
| void end(){ | |
| exit(0); | |
| } | |
| int main(void) { | |
| void (*f[])() = { cont, end }; | |
| int i = 1,j; | |
| char r[14] = "\0\0\0\0FizzBuzz\0"; | |
| loop_start: | |
| sprintf(r,"%d",i); | |
| j=i*i*i*i; | |
| r[8]=(1-j%5)*'B'; | |
| printf(r+4*(((1-j%3)+(1-j%5)*2)-2*(1-j%3)*(1-j%5))); | |
| printf("\n"); | |
| f[i/100](); | |
| i++; | |
| goto loop_start; | |
| } | |
| //https://ideone.com/erlH2s | |
| //結局四回かけるのは正解。 |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| void cont(){}; | |
| void end(){ | |
| exit(0); | |
| } | |
| int main(void) { | |
| void (*f[])() = { cont, end }; | |
| int i = 1,j; | |
| char r[14] = "\0\0\0\0FizzBuzz\0"; | |
| loop_start: | |
| sprintf(r,"%d",i); | |
| j=(3-i%3)/3+(5-i%5)/5*2; | |
| r[8]=(5-i%5)/5*'B'; | |
| printf(r+j*j*j*j%14%5*4); | |
| printf("\n"); | |
| f[i/100](); | |
| i++; | |
| goto loop_start; | |
| } | |
| //https://ideone.com/D9vfjr | |
| //これで4かけてるのは単に{0,1,2,3}から{0,1,2,1}を作るだけの為。 |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| void cont(){}; | |
| void end(){ | |
| exit(0); | |
| } | |
| int main(void) { | |
| void (*f[])() = { cont, end }; | |
| int i = 1,j; | |
| char r[14] = "FizzBuzz"; | |
| loop_start: | |
| sprintf(r+9,"%d",i); | |
| r[4]=(i+4)%5/4*'B'; | |
| printf(r+(1-(i+2)%3/2)*(9-(i+4)%5/4*5)); | |
| printf("\n"); | |
| f[i/100](); | |
| i++; | |
| goto loop_start; | |
| } | |
| //https://ideone.com/Zgt7Nb | |
| //若干改良。 |
| rk(1) download copy | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| void cont(){}; | |
| void end(){ | |
| exit(0); | |
| } | |
| int main(void) { | |
| void (*f[])() = { cont, end }; | |
| int i = 0; | |
| char r[16] = "FizzBuzz"; | |
| loop_start: | |
| sprintf(r+9,"%d",i+1); | |
| r[4]=i%5/4*'B'; | |
| printf(r+(1-i%3/2)*(9-i%5/4*5)); | |
| printf("\n"); | |
| f[i/99](); | |
| i++; | |
| goto loop_start; | |
| } | |
| //https://ideone.com/OXSjlE | |
| //微修正 |