各文字列を最大1回使用して、一連の文字列の可能なすべての組み合わせを生成しようとしています。
- 出力文字列の長さは定義されていません (一度しか使用できないため、最大長は指定された文字列の数です)
- たとえば、文字列セット
array('A','B')
は A、B、AB、BA を生成します。 - たとえば、文字列セット
array('ABC', 'Z')
は「ABC」、「Z」、「ZABC」、および「ABCZ」を生成します。 - 文字列セットは同一のエントリを持つことができ、出力は一意である必要はありません。たとえば、文字列セット
array('A', 'A')
は 'A'、'A'、'AA'、'AA' を生成します。(実際には重複は必要ありませんが、物事をより難しくしたくありません)
2 つの文字列には 4 つの組み合わせ (2=>4) と 3=>15、4=>64、5=>325 ... があることを知っています。
私はプログラマーではないので、少なくとも「やりがいがある」と感じました。ネストされたループはすぐに複雑になりすぎます。より簡単な解決策は、文字列を含む配列のインデックスでパターンを見つけることです。しかし、これにより、文字列を重複して使用できます...
$strings = array('T','O','RS');
$num = 0;
$stringcount = count($strings);
$variations = array(0,1,4,15,64,325,1956,13699,109600,986409);
for($i=0;$i<$variations[$stringcount];$i++){
$index = base_convert($num, 10, $stringcount);
$array_of_indexes = str_split($index);
$out='';
for($j=0;$j<count($array_of_indexes);$j++){
$out .= $strings[$array_of_indexes[$j]];
}
echo $out . '<br />';
$num++;
}
結果: TORS OT OO ORS RST RSO RSRS OTT OTO OTRS OOT OOO OORS
良くない、多くの重複 + 多くの有効な組み合わせが含まれていません
この解決策が多くの点で間違っていることはわかっていますが、どこから始めればよいかわかりません。助言がありますか?事前にthx!