ショートコーディングに挑戦してみた

どーもこんにちは。calcsです。
 さて、今回のお題はショートコーディング(Short coding)。
以前からたまに触れている、私の通う学校でのC言語の授業の話です。

今日はその授業があったんですが、今日提出だった課題をネタにします。
課題は以下のようなものでした。



1.コンソールに九九の表を出力せよ。
2.数字は二桁で桁揃えされ、数字の間はタブ区切りである

それで、とりあえず提出用のコードを3分かからず書いたのが以下。

#include <stdio.h>

int main() {
int x,y;

for (y=1;y<=9;y++){
for (x=1;x<=9;x++){
printf("%2d¥t",x*y);
}
printf("¥n");
}

return 0;

}

至極真っ当です。
んで、まぁ、昼休みも暇だったんで、ちょっくらgolf(コードを短くする遊びのこと)に勤しんでみたわけです。

それで出来た、今のところ最短コードは以下です。

main(i){for(i=0;i<81;i%9||puts())printf("%2d	",(i/9+1)*(i++%9+1));}

67バイトになりました。なんかまだ冗長な気もするんですが、考えてもアイデア出ませんでした。

まだもとのコードに近いのは、ネストしたループの構造を圧縮した

main(i,j){for(i=j=1;i<10;)j<10?printf("%2d	",i*j++):(puts(),j=1,i++);}

の70バイトコードかと。こっちはこっちでまだまだ削れそうな気がする・・。


一応67バイトの方が処理系依存(授業で使ってるのがbccなので、それに合わせた)なのに対し、70バイトのほうは大体の環境で動くはず。
ポイントはCでは計算式の評価順序が未定義ということ。

 誰かもっといいアイデア思い浮かんだら教えてください。