私には興味深い問題があり、私の人生では、良い解決策を見つけることができません。0+「トークン」を含むフレーズが与えられます。例えば:
なんと%A1%牛。%A2% には奇妙な形の %A3% がありました。
上記の 、%A1%
、%A2%
および%A3%
はすべて「トークン」です。各トークンには、その代わりに使用できる可能性のある単語の独自のリストがあります。
public class Token {
// Ex: %A1%
private String code;
// Ex: "brown", "red", "silly"
private List<String> candidates;
}
任意のフレーズ (上記の例だけでなく) を取得し、トークンの存在をスキャンするコードを作成する必要があります。トークンが見つかった場合は、各トークンの候補リストのすべての組み合わせを使用して、フレーズのすべての順列を生成する必要があります。たとえば、上記の 3 つのトークンに対して次の候補が存在した場合:
%A1%
====
brown
red
silly
%A2%
====
arsonist
banker
%A3%
====
feet
hands
次に、次の文順列が生成されます。
How now brown cow. The arsonist had oddly-shaped feet.
How now brown cow. The arsonist had oddly-shaped hands.
How now brown cow. The banker had oddly-shaped feet.
How now brown cow. The banker had oddly-shaped hands.
How now red cow. The arsonist had oddly-shaped feet.
How now red cow. The arsonist had oddly-shaped hands.
How now red cow. The banker had oddly-shaped feet.
How now red cow. The banker had oddly-shaped hands.
How now silly cow. The arsonist had oddly-shaped feet.
How now silly cow. The arsonist had oddly-shaped hands.
How now silly cow. The banker had oddly-shaped feet.
How now silly cow. The banker had oddly-shaped hands.
%A1%
には 3 つの可能な値があり、%A2%
とにはそれぞれ 2 つの可能な値があるため%A3%
、合計で 3 x 2 x 2 = 12 の順列があります。
フレーズ内のトークンの数が常に一定である場合、問題は (少なくとも私にとっては) はるかに簡単になります。しかし、問題は次のとおりです。
- フレーズに含まれるトークンの数はわかりません (0 個のトークンが含まれる場合もあります)。と
- どのトークン (したがって、どの候補リスト) が各フレーズに表示されるかはわかりません。そのため、フレーズをスキャンしてトークンのリストを取得し、それらを「順列ジェネレーター」に動的に挿入できるようにする必要があります。必要です。
どういうわけか、私はこれについて頭を悩ませることができません。これをどのようにコーディングできるかについてのアイデアはありますか? 前もって感謝します!