ちょっとひらめきました。多分車輪の再発明系というか、基礎を知らないということだと思いますが、、。
重複を含むnのn乗の組み合わせすべてを列挙するにはn桁目までのn進数を書き出せば良さそうです。
3の場合
0:000
1:001
2:002
3:010
4:011
5:012
6:020
7:021
8:022
9:100
10:101
11:102
12:110
13:111
14:112
15:120
16:121
17:122
18:200
19:201
20:202
21:210
22:211
23:212
24:220
25:221
26:222
9×2+3×2+1×2
18+6+2
おお、27種類。
プログラムにしてみると、、、
$color_element = array($r, $g, $b);
$num_elements = count($color_element);
$buff[$num_elements];
$i = 0;
while($i < pow($num_elements, $num_elements)){
echo $i.":";
$j = $num_elements - 1;
$tmp = $i;
while($j){
$num = floor($tmp / pow($num_elements, $j ));
$buff[$j] = $num;
echo $buff[$j];
$tmp = $tmp % (pow($num_elements, $j));
$j--;
}
$buff[0] = $tmp;
printf("%d<br />\n", $buff[0]);
$i++;
}
ときに「全ての組み合わせを出力」と「n進数表記」の勉強となってしまいましたが、「重複しない全てのパターン」の出力までもう一歩のような気がします。
コメントを残す