日下部陽一(void)さんと遊ぼう(2)

mixiのある人のエントリで、このプログラム(→id:y_aoi:20061115)を短くすることを話していたんですよ。私の案は、id:y_aoi:20061116で、「mかeが31以上」が終了条件になってるけどこれ「32以上」なら、「m<31&&e<31」ではなく「~(m|e)&32」と書けて良いのになぁてな話を書いちょりました。そしたらそこに日下部さん登場です。*1


2006年11月20日 07:59 Kusakabe


> int i;f(x){for(i=0;i<x;i++)printf("?");puts("");}
これより、
>f(x){for(int i=0;i<x;i++)printf("?");puts("");}
このほうが短い ;-)
もしくは、
> f(x){while(x--)printf("?");puts("");}

printfやputsなんかつかわなければさらに。

日下部さんキター(゚Д゚)! さっそく、絡みに行きます。


2006年11月20日 08:06 やねうらお


> f(x){while(x--)printf("?");puts("");}

ちなみに、whileとfor(;;)とは文字数が同じなので、

while(exp1){st;exp2;}

for(;exp1;exp2)st;
※ expは式。stは文。

と短く書けることがあるので普通short coderはwhileを用いないのですよ。
文字数的なアドバンテージがforと比べて何ひとつ無いので。

とか言ってみる。

興奮のあまり変な日本語になった謝っておく。


2006年11月20日 08:08 やねうらお


↑拙い日本語になった。すんません。


2006年11月20日 08:11 Kusakabe


> 普通short coderはwhileを用いないの

それはまったくのデマで、実際にはforかwhileか場合によって
「短くなるほうを使う」のがいわゆるshort coder。
(forとwhileは等価ではなくcontinueの問題があるので)

> for(;exp1;exp2)st;
> ※ expは式。stは文。
これもデマ。stを文とするなら
for(;exp1;exp2)st
となる。

デマ呼ばわりキター(゚Д゚)!! しかも5分後のレス。なんとも超高速だ。


2006年11月20日 08:14 Kusakabe


for (式1; 式2; 式3) {
文1
文2
}

式1;
while (式2) {
文1
文2
式3;
}

と等価だと思っているやつはぼけ。

ぼけ呼ばわりもキター(゚Д゚)!!
(つづく)

*1:本当は、日下部さんを釣り上げるまでに紆余曲折あったんですけど、そのへんは企業秘密ってことで。