の続きで
ある文字列の組み合わせで
隣あった文字列の組み合わせを
すべて作るループを考えてみた
こんなかんじ
[as3]
(
–テスト用
tagStr = “abc”;
–1文字になるまで繰り返す
Local i = tagStr.count;
Local u = 0;
Local j = 1;–文字の合成回数、最小は1から
Local compStr = “”;–合成文字
Local analysisTagStr = #();–調べ上げる文字列の組み合わせ
–文字の最大数分繰り返す
while i > 0 do
(
–合成回数を設定
u = j;
while u > 0 do
(
–一旦文字を初期化
compStr = “”;
–K文字目からi文字数分の文字列を合成
—
for k = u to (u+(i-1)) do
(
compStr += tagStr[k];
);–for end
append analysisTagStr compStr;
u -= 1;
);–while end
–カウントを一つ移動する
i -= 1;
j += 1;
);–while end
print analysisTagStr;
)
[/as3]
隣あった文字列の組み合わせは
1234という文字列ならば
4文字で、1組
3文字で、2組
2文字で、3組
1文字で、4組
と最大数~1の間で組み合わせ数は一つづつ増えるので
そのことを踏まえてループを仕込んだ
ただし、このループだと
文字列がそもそも1文字あった場合
何もしないので、
1文字の場合はif判定で弾いておけばいいかな
123456789の場合の組み合わせは
“123456789”
“23456789”
“12345678”
“3456789”
“2345678”
“1234567”
“456789”
“345678”
“234567”
“123456”
“56789”
“45678”
“34567”
“23456”
“12345”
“6789”
“5678”
“4567”
“3456”
“2345”
“1234”
“789”
“678”
“567”
“456”
“345”
“234”
“123”
“89”
“78”
“67”
“56”
“45”
“34”
“23”
“12”
“9”
“8”
“7”
“6”
“5”
“4”
“3”
“2”
“1”
の計45個
んー、問題なさそうだ
よし、あとは文字列を評価するだけだから
とりあえずやってみるか~