ふと思い立って九九を表示するプログラムを考えてみる
課題は「できるだけサイズが小さいコード」で書くこと
結果C/C++で83バイトを達成


#include
main(){for(int i=9;i<99;)printf(++i%10?"%3d":"\n",i/10*(i%10));}
んでJavaやDだとどんなもんかなと思い試してみるも基本的なロジックは同じになってしまいサイズも減らすことはできなかった
ただそのとき気付いたことが一つ
とりあえず以下のコードを見てもらいたい

C/C++

                                                                              • -

#include
main(){
int i=0,j=0;
printf(++i?"%d %d\n":"",i,j);
printf("i=%d j=%d\n",i,j);
}

                                                                              • -

1 0
i=1 j=0
========================================
JAVA

                                                                              • -

class test{
public static void main(String[] args){
int i=0,j=0;
System.out.printf(++i!=0?"%d %d\n":"",i,j);
System.out.printf("i=%d j=%d\n",i,j);
}
}

                                                                              • -

1 0
i=1 j=0
========================================
D

                                                                              • -

import std.stdio;
void main(){
int i=0,j=0;
printf(++i?"%d %d\n":"",i,j);
printf("i=%d j=%d\n",i,j);
}

                                                                              • -

0 0
i=1 j=0

それぞれ各言語のコードと結果である
注意すべきはDの三項演算子の条件句
前置インクリメントをしているのだが、同じ行の実行結果に影響を与えていない
自分は今までCやJAVAな動作が正しいと思っていたのでDコンパイラのバグかと思うんだがどうなんだろうか
誰か詳しく解る偉い人居たら教えて欲しいです