Cozy Ozy このページをアンテナに追加 RSSフィード

2007-07-27 ショートコーディング本

ショートコーディング本 ショートコーディング本 - Cozy Ozy を含むブックマーク

Amazonで調べると、どうやら8月9日に発売されるようです。著者なのに知りませんでした(;´Д`)

というわけで宜しくお願い致します。

MYCOM BOOKSのサイトに内容の紹介と、少し間違った目次があります。

http://book.mycom.co.jp/book/978-4-8399-2523-9/978-4-8399-2523-9.shtml

詳細は後日ということで、とりあえず発表!!

  • 追記

内容は、これまで(2005年11月〜つい最近まで)積み重ねてきたコード短縮技術のほぼ*1すべてと、これから大きく成長してゆく若いプログラマの皆さんへのメッセージです。一般的に、良い本を書こうと思えば自分の持っているスキルの50%以下の内容にとどめておくべきです。そうでなければ説明が不十分であったり、間違いが出てきてしまうからです。しかし私はプロのライターではありません。もしかしたらこれが最後のチャンスかもしれませんし、とにかく書きたいことはすべて書くつもりで取り組みました。

第1章は、ショートコーディングという言葉自体が初めてという方を想定して書きました。前半はショートコーディング、オンラインジャッジシステムの説明をしました。後半は、POJの比較的簡単な問題を取り上げ、具体的なコード短縮例を見てもらうようにしています。

第2章は「これでもか」と言わんばかりに、コード短縮テクニックを紹介します。規則性についての問題から始まり、qsort関数Hack、標準関数を利用し尽くしたショートコード、たった1文字の演算子によってコーダが短縮される美しさや、ビット演算、ポインタ等、私が300問以上取り組んだ中から厳選に厳選を重ねた問題を元に解説しています。

第3章は、第2章の発展的内容(すでに2章自体が十分難解かもしれませんが)で、複数のループ文を凝縮する手順や、伝説の1145を含めたmain再帰の具体例、shinhさんの編み出したバイナリ埋め込みコード、hinoeさんと挑んだ難問のショートコーディング記録等、後にも先にも「こんなこと誰も書かんだろうな」ということを詰め込みました。

第4章は、第2・3章はC言語に関するショートコーディングテクニックでしたが、POJで他に使用可能なC++/G++、JavaPascalのショートコーディングを行い、それらとC/GCCのコードとの対決という形でショートコーディングを描きました。最後はPOJから離れ、本格的Code Golfにチャレンジできるように、つい先日流行ったFizzBuzzを例にコード短縮しながらanarch golfの紹介をしています。

第5章は、本来ならば技術系の書籍に必要ないのかもしれない、私の考えや読者の皆さんに対するメッセージにページを割いています。この書籍を発表するまでに、どれだけの人が関わり、どのようなドラマがあったのかを、一つの歴史として残しておきたいという、私の願いがありました。「Short Coding 〜職人達の技法〜」は技術書であり、歴史書でもあり、ショートコーダーそのものでもあります。

※また追記します。

http://d.hatena.ne.jp/Ozy/20070730#p1

へ続く

*1:セキュリティに関わることの大半は、意図的にカットしてあります

SeasonsSeasons 2007/07/27 18:42 予約!!といきたいところですが、
やはり書店で直接のほうがよいですね^^

fkmfkm 2007/07/27 22:56 生協で注文して10%OFFで手に入れておきます(`・ω・´)

nanagyounanagyou 2007/07/27 22:58 いよいよですね。楽しみです。

kiwi_xpkiwi_xp 2007/07/28 01:46 キタコレ!買います買います!wktk

OzyOzy 2007/07/28 07:41 ありがとうございますm(__)m
amazon→保存用
近所の書店→すぐに読む用
で、お一人様2冊以上お願いします(笑)

こんぶこんぶ 2007/08/03 20:29 ぜひ購入させていただきます。たのしみ♪

OzyOzy 2007/08/04 00:28 ありがとー!!
娘さんに読んであげて。なんてなー^^

2007-06-27 お亡くなり!?

[]お亡くなり!? お亡くなり!? - Cozy Ozy を含むブックマーク

どうやら直接蘇生を行わないと死んだままのようです。寂しいですねー。しかしサーバが復活するまでボケーっとしてるのもアレですから、ゴルフできない期間を利用して新生穴ゴルサーバーに追加してほしい機能とか、なんか新しいアイデアを考えましょー > 皆さん

えーと、今思いついたのは、deadline付きの問題の場合だけ期間内は記録が表示されない(順位だけ)にすると結構燃えるんじゃないかなーっていうのです。PKUのコンテストでは期間内だけ記録が表示されなくて、結構ドキドキしたので。あと、FizzBuzzみたいに100人以上postしていると記録を見るのが大変なので、20人くらいで区切って表示とかしてもらえると良いかなー。

んー、あと何があるやろ・・・

2007-05-13 ショートコーディングって何?

[]ショートコーディングって何? ショートコーディングって何? - Cozy Ozy を含むブックマーク

http://d.hatena.ne.jp/gpuppur/20070512

よく誤解されることなのですが、

正直ショートコーディングより、開発時間、実行速度、実行時に必要な資源をショートにするほうが好きです。

  • Golfとの違い

ショートコーディングは単にコードを短くするものではありません。また、Code Golfのように単純な問題で、主にスクリプト言語を用いてアクロバティックなコードを書くような、パズル的要素ばかりで成り立つものでもありません。

ショートコーディングの基盤はPKU Judge Onlineで、ここではACM/ICPC対策の問題として様々な問題が存在します。Code Golfで扱うような単純な問題から、数学的な問題や、グラフ理論・動的計画法等の最適化を要する問題から、同じアルゴリズムでも処理系の特性を掴んで細かなチューニングを行うという、最速コード・低消費メモリについての研究もすべて含んだものがショートコーディングです。

  • 最短コードは上質な「おから」

ここでよく紹介する最短コードは、それらをすべて研究し尽くした上での残りカス、言わば「おから」のような存在です。実行速度や消費メモリなどの栄養素を十分絞りきった上で、おからとしておいしく食すのか、「んなもんカスなんやからウンコと一緒じゃ(`ω´)」と言ってウンコ扱いするのかはプログラマの勝手かもしれませんが、おからをウンコというプログラマは、私はウンコプログラマだと思います。

  • 開発時間

また、開発時間などというものはどうとでも言えるんじゃないかと思います。短期間で開発を行うには、システマチックな問題もあるかもしれませんが、基本的に開発者(組織)が蓄えた資産を効率的に出し入れできるかの問題ですので、たとえば最近私が書き上げる最短コードは以前のものと比較にならないほど高速な仕事です。最近話題になったFizzBuzzのコードでも、Cで最短の73Bは結構時間がかかりましたが74Bの驚異的な短さのコードは2分とかかっていません。これは、今まで積み上げてきたショーとコーディングのノウハウとその経験で培った勘によるものです。

  • プログラミング修行

これこそ「役に立たないことをやろう」という言葉に込めた私の思いです。ショートコーディングによって、最終的に出来上がるものはコードのおからです。好きな人には好評かもしれませんが、そうでもない人にとっては「何でそこまでする??」と思われるだけの存在です。しかし、そこまでやるからこそプログラマにとって必要な能力や忍耐力・集中力を鍛えられるのであって、その部分を無視してはなりません。

私のようにおからを作り続ける必要はありませんが、一端のプログラマになるのならそれくらいの修行はしておかねばならないでしょう。

gpuppurgpuppur 2007/05/13 17:32 今までショートコーディングでは速度、消費メモリはほどほどで、とにかくコードを短くするものだと思ってました。おからとしてショートコーディングするのはいいですが、オープンソースとか仕事で書くソースコードは読み易さ重視にしないといけないですよね。だからこそ、そこにショートコーディングの面白さがあるんじゃないかという気がしました。

OzyOzy 2007/05/13 17:41 ある程度複雑な問題だと、短さだけを考えていても全くうまくいかない状況って結構ありまして、その場合は最速コードをベースに妥協点を探ります。ショートコーディングの基本的な理念を一言で表せば、たぶん「逆説」なのだと思います。暗号のようなコードを書くからこそ、コードの可読性について改めて考えたりと、オープンソースや仕事にも通じる部分はたくさんあると思います。

2007-02-25 ふぃづばづ

[][]ふぃづばづ ふぃづばづ - Cozy Ozy を含むブックマーク

http://golf.shinh.org/p.rb?FizzBuzz

なんか3の倍数とか5の倍数でふぃづばづ言う遊び。相変わらずRubyのセンスが無いのですが、他の言語ではピピンときました。

  • pl
print'Fizz'x!($_%3).Buzz x/0|5$/||$_,$/for 1..100

49B。結構嬉しい。

(追記)48Bでけた。

print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/for 1..100

  • js
for(i=0;i++<100;print(i%5?a||i:a+"Buzz"))a=i%3?"":"Fizz"

56B。はじめてのjs

  • rb
1.upto(?d){|i|v=i%3<1?"Fizz":"";puts i%5<1?v+"Buzz":v>""?v:i}

61B。センス無し夫。

(追記)頑張った。56B

?d.times{|n|n%3>1&&s=:Fizz;puts n%5>3?"#{s}Buzz":s||-~n}

  • c
main(i)
{
  for(;i<101;puts(i++%5?"":"Buzz"))
    printf(i%3?i%5?"%d":0:"Fizz",i);
}

74B。最初に思いついたコードそのまま。printfに0を渡しても落ちない。

(追記)73Bのコードはあまりに変態的なので、ショートコーディング本の中で解説しました(宣伝 ̄ー ̄)

  • cpp
#import<ios>
main(int i){
  for(;i<101;puts(i++%5?"":"Buzz"))
    printf(i%3?i%5?"%d":0:"Fizz",i);
}

91B。Cのを書き変えただけなのでまだいけるのかも。

  • その他

飽きた。

Rubyのゴルフセンスを磨くにはどうしたら良いのでしょう。。。

nanagyounanagyou 2007/02/25 18:08 >printfに0を渡しても落ちない。
うちの環境(FreeBSD+gcc)だと落ちてしまいます。
他にも puts/gets 周りでも動作が違っています。
公開されているものと同一環境を用意してみようかなぁ。でも、Linux は苦手 orz

穴ゴルの Checker をいちいち試すのも面倒&迷惑ですしね・・・

OzyOzy 2007/02/25 18:54 コンパイラ言語は事前に処理系について調べることが多いところが面倒というか面白いというか。。。ですね。

shinichiro_hshinichiro_h 2007/02/25 19:02 めんどうはともかく、迷惑では全然無いのでガシガシやっちゃってもらって問題ありませんです。

nanagyounanagyou 2007/03/01 00:16 Ubuntu を入れてしまいましたが、慣れるまでしばし checker にお世話になります。