ショートコード記録更新65バイト
前回書いたショートコードがなんと2バイトも縮まりました。
コードは下の感じ。
main(i){for(i=0;i<81;i%9||puts())printf("%2d ",~(i/9)*~(i++%9));}
九九の、段と行で、+1とデータに下駄を履かせていたのをとって、それぞれのビット反転したものを掛け合わせるように変えることで、二文字省略です。
これはビット反転が1の補数に相当し、コンピュータが2の補数を負の値の表現形式に用いていることを利用したものです。
1の補数のビット列を、2の補数として評価すると、絶対値の値が1だけ大きくなります。なぜそうなるのかは、-0という値を考えてみると分かると思います。
そしてこの状態で、それぞれのデータは負の値をとっているんですが(補数なので)、掛け合わせれば、負×負=正となって、元通りって訳です。
そろそろこれ以上縮めれないんじゃないかなーって気がしてきました。アイデアもとむ。