1行プログラミング

近頃、地底で流行るもの〜。

1から7の数列のpermutationを全て重複無く出力するプログラムを、なるべく少ないbyte数で書きなさい。言語は問わない。
ただし、フォーマットは以下に準ずる。数字以外のよけいな出力をしない、改行を入れる。

1234567
1234576
...

えーと、水曜の資料を作ってたときに流行りだしたから、火曜の深夜28時くらいかな? 次期によって流行り廃りもあるもので。
pascalによってお代が出されて、本人はCで、速い人がOCamlで実装。私はC++でnext_permutation。forで回すか、再帰で回すか。再帰の回し方を工夫しながらだんだん小さく。110 bytesくらいか。このあたり、iterじゃなくてmapを使ったり、怪しげな工夫がみられる。pascalPerlがこの時は最小か。
その後、掲示板に貼られてから盛り上がり始める。ark氏のPythonがさくっと100 bytesを突破して一時強かったが、.scmがHaskellの集合表現で対抗。70 bytes台。私はRubyの..を使った、generate and testで追撃。この辺で70 bytesを突破。
次の日になると、satoさんがshell scriptとegrepのgenerate and testで驚異的に縮めて50 bytes、同じことをYashiromannと私がRubyで実装。でも及ばず。kotaniさんによる期待のPrologも70 bytes止まりか。pascalPerlでさらに小さくしたり、1234567の代わりに謎の累乗計算で縮めたりでついに50 bytesも突破。今日に至る。
まぁ、速度とかきれいさとか、そういうのはおいといて。Prologが短くてわかりやすい。それはそうと、こういったどうでもいい作業って、初めて言語をやるときにちゃちゃっとチュートリアルしたいとき便利かもと思った。サイズを小さくするために、あれやこれやリファレンスをしらべて、構文調べて、自然といろいろ覚えていく。私もわりとRubyの知らないことをいろいろ読めたし。にしても、Rubyのドキュメントは検索が使いにくい! リファレンスも一覧が出ないあたり、JavaDocに比べると一段使いにくいといった感覚。google desktopでも使うか。それとも、一覧出す方法があるのかな?