| 
    
     |  | 簡単に解説しますと・・・ 
 文字列"ABCD"の存在フラグを2進数の数値として算出させてます。
 
 今回は、算出が楽なように[ABCD]を[DCBA]と反転させています。
 つまり
 
 [DCBA] [1111] 15
 [D A] [1001]  9
 
 こんな感じで表せますので、組み合わせPatternを2進数で表すと
 
 [  ][0000] 0  [DCBA][1111] 15 ・・・なし
 
 [  A][0001] 1  [DCB ][1110] 14
 [ B ][0010] 2  [DC A][1101] 13
 [ BA][0011] 3  [DC ][1100] 12
 [ C ][0100] 4  [D BA][1011] 11
 [ C A][0101] 5  [D B ][1010] 10
 [ CB ][0110] 6  [D A][1001]  9
 [ CBA][0111] 7  [D  ][1000]  8
 
 7 Patternになります。
 
 これは、すべてのbitが真のとき「1111」= 15から、
 1を引いて2で割ったもののようですので
 (ここら辺、証明をしていないのでちと怪しい・・・)
 それをLoopさせて求めています。
 
 とりあえず 3,4,5個の組み合わせまでは正常のようです。
 
 |  |