タグ

ブックマーク / yaneurao.hatenadiary.com (9)

  • 日下部(void)さんと遊ぼう(12) - やねうらおブログ(移転しました)

    そして真相。 2006年12月05日 07:26 Aさん(トピ主) これ日下部先生の勘違いじゃないかな… 何度脳内コンパイルしても無理だ… 2006年12月05日 22:34 Aさん(トピ主) scope とか continue の動作以外で何かあったのかな… ていうか日下部先生はあんな数分であそこまでの議論の解決を 思いついたんだろうか… すげえなあ 2006年12月10日 11:52 Kusakabe > 日下部先生はあんな数分であそこまでの > 議論の解決を思いついたんだろうか 『あそこまで』ってほどのもんか? Cやるなら常識だろ。 (それとも『あそこ』で指すものは別のもの?) code golfやgoogle code jamで上位にランキングするような日を代表するトッププログラマが何人もで考えてもわからないようなことが「Cやるなら常識」らしい。日下部先生にも困ったものだ。 まあ

    日下部(void)さんと遊ぼう(12) - やねうらおブログ(移転しました)
  • 日下部(void)さんと遊ぼう(11) - やねうらおブログ(移転しました)

    そして煽り合戦へ。 2006年11月26日 08:04 Aさん(トピ主) くれんでもくれても 教えてくれればすぐ終わる話だと思うケド まいっか。 日下部っちにもう一回聞きたいのだけど というか事実確認をしたいんだが while文がfor文より短くなるケースがあるというのは このスレの議論の上で 当に有り得る話ですか?勘違いでしたか? きちんと確かめておきたいのですが。 2006年11月26日 10:38 Kusakabe > 「くれれば」に値するかるかどうかを それは後で知ることになるわけです。 2006年11月26日 11:17 やねうらお > それは後で知ることになるわけです。 レニエのお菓子はいらんのかえ? それともレニエのお菓子と言うものが存在するというのは全くのデマで(ry 2006年11月26日 12:24 やねうらお > くれればおしえますよ。 せっかくレニエのお菓子を渡し

    日下部(void)さんと遊ぼう(11) - やねうらおブログ(移転しました)
  • 日下部陽一(void)さんと遊ぼう(7) - やねうらおブログ(移転しました)

    さて話を戻そう。私の反論が大チョンボだったというのは、マクロの存在を全く考慮に入れていないということにある。short codeを目指す場合、マクロを用いることでコードの短縮化が図れるならば当然マクロを使うだろう。そのマクロはC/C++言語においてプリプロセスで処理される。簡単に言ってしまえば文字置換である。文字置換であるがゆえにマクロは文法規則を全く無視して介入してくる。 そこでC/C++言語の文法構造のBNFやら何やらを持ちだしてきて等価性を言ってもマクロの前には無力なのである。 例えば、for(;exp;) の場合、セミコロンを省略できない。whileではセミコロンは必要ない。この違いがどういう結果を導くのか。次のような括弧つきのマクロがあった場合、whileのほうが短くなるのである。 #define FOREVER (1) for(;FOREVER;) と while FOREVE

    日下部陽一(void)さんと遊ぼう(7) - やねうらおブログ(移転しました)
  • 日下部陽一(void)さんと遊ぼう(6) - やねうらおブログ(移転しました)

    # のら 『処理系によっては2つの書き方が別なバイナリになる可能性があるとか、 do-while を使えば短くなる場合があるとか、そういうオチだったら萎えますな。』 今回のように、AとBとがequivalent(等価)なコードであると言う場合、それは意味的に同じと言うことである。ここで意味論について深く突っ込む気は無いので簡単にだけ言うと、同じ意味ならば同じ働きをすると考えて良い。同じ働きをするとは言っても生成されるコードは異なるかも知れない。ある働きをするプログラムというのは無数の組み合わせが考えられうるからである。 http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n843.htm の6.8.5.3に、forをwhileで書き換える例が載ってますが、その例に for(;exp;) st を適用すると while (exp) st と等価なのでは?

    日下部陽一(void)さんと遊ぼう(6) - やねうらおブログ(移転しました)
  • 日下部陽一(void)さんと遊ぼう(3) - やねうらおブログ(移転しました)

    ぶっちゃけ、最初、日下部さんがwhileを使った short codeを書いて見せたとき、こいつは全然たいしたこと無いなと思った。 と言うのも for(;;) と while()は同じ文字数だし、while(A) B の形はfor(;A;)B と等価であって最悪のケースにおいてもwhileとforで書いたものは同じ文字数である。まして、while(A) { B C } のようなものもforだとfor(;A;C) B などと書き換えが利くことが多く、for で書いたほうが短い。よって、short coderはwhileなんか使わない。使う必要が無いからだ。*1 そこに不覚にもらいついてきた日下部さんを見て、この時点で、私の勝ちは決まったも同然だと思った。 ところがそんなに甘くはなかった。攻防の続きをご覧いただこう。 2006年11月20日 08:26 やねうらお > stを文とするなら >

    日下部陽一(void)さんと遊ぼう(3) - やねうらおブログ(移転しました)
  • 日下部陽一(void)さんと遊ぼう(4) - やねうらおブログ(移転しました)

    いまにして思えば、次の日下部さんの返答は、日下部さんが私のもとの書き込みを誤読した可能性はある。返答が来るまでの時間が短すぎる。あまり元の文章を丹念に吟味したわけではないのではないかと思ってしまう。それではご覧いただこう。衝撃の返答文を。 2006年11月20日 08:41 Kusakabe > さすが、よく見てはりますね。 どこが! > continueの動作に関してforとwhileが等価ではないことはもちろんわかっちょりますが、 > whileのほうが短くなるケースなんてありますか ありますよ。 では、conitune以外で、forとwhileが等価でない箇所は あと、どことどこか知ってますよね? > とは等価なので st1に「何が入るか」によるでしょ。 > whileで書くと短くなるケースがあるというのは全くのデマじゃない whileのほうが短くなるパターンありますよ。 典型的な例

    日下部陽一(void)さんと遊ぼう(4) - やねうらおブログ(移転しました)
  • 日下部陽一(void)さんと遊ぼう(5) - やねうらおブログ(移転しました)

    正直に告白すると、私は、日下部さんのその返答を誤読した。いまにして思えば、日下部さんは二つのことを言っている。一つ目は、 while(exp1) { st1 st2 exp2; } と for(;exp1;) { st1 st2 exp2; } が等価では無いということ。二つ目は、whileのほうがforより短くなるケースがあるということ。 二つの事項の因果関係はどこにも明示されていないのだ。むしろ、『st1に「何が入るか」によるでしょ。 』のあとの二行の空行は、いまにして思えば「後者は前者の論理的な帰結ではないですよ、別の話題ですよ」という意味だったように思える。 それを私はこともあろうか、前者ゆえに(そのテクニックも用いることで)後者(whileで書いたほうがforより短くなることがある)が導き出せるのだと勘違いしてしまった。これは私の理解力の至らなさの結果である。しかし、(言い訳がま

    日下部陽一(void)さんと遊ぼう(5) - やねうらおブログ(移転しました)
  • 日下部陽一(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なんかつかわなければ

    日下部陽一(void)さんと遊ぼう(2) - やねうらおブログ(移転しました)
  • 日下部陽一(void)さんと遊ぼう(1) - やねうらおブログ(移転しました)

    日下部陽一さん(voidさん)と言えばfj時代から毒舌で有名だ。*1 最近ではmixiに舞台を移し、その猛威を奮っているようだ。 「よく読めばわかるんだけど彼には悪意は無いんだよ」と言った人が居たが、私もその意見に賛同する。 まあ、悪意は無いが、いたずら心には満ちていると言ったほうが適切かも知れないが。頭のいい人なので、突っ込みはすこぶる的確で、話はよく脱線するけれども読んでいて面白い。ある種、中毒性がある。 例えば、左のは日下部さんのC言語で、初心者向けっぽいタイトルだが、細かいところを深く突っ込みすぎるので初心者向けでは無いと思う。まあ、そのへんはアマゾンのレビューでも読んで雰囲気を感じ取ってもらいたい。 それはさておき。この度、ふとしたことから日下部さんとやりあうことになった。あまりに面白いので御人の許可は全く得ずして掲載する次第である。文句あっか、こんにゃろ!(`ω´) ←誰

    日下部陽一(void)さんと遊ぼう(1) - やねうらおブログ(移転しました)
  • 1