順列の問題を解決しようとしていますが、いくつかの問題があります。
いろいろなタイプのアイテムに合う「棚」があります。棚は位置が分かれており、アイテムには「サイズクラス」があり、棚自体にどれだけのスペースがあるかを示します。
最大4ポジションの棚に、 1ポジションのサイズクラスの(1,2,3,4)
3アイテムのすべての充填の組み合わせを生成したいと思います。。(A,B,C)
(eg. AAAA, AAAB, AAAC, BBBB, BBBA, ...)
次のステップでは、2つの位置を取るアイテムで順列を生成する必要があります。だから私は2つの位置(A,B,C)
と1つの位置を生成する必要があります(D,E,F)
(eg. AAD, AAE, ABD, ...)
私はここでこのライブラリを使用しようとしましたが、私の解決策は決して良いものではありません(そしてそれは2番目の例を解決しません)
using System;
using System.Linq;
using System.Collections.Generic;
using Facet.Combinatorics;
namespace iCombine
{
class MainClass
{
public static void Main (string[] args)
{
char[] inputSet = "ABCABCABCABC".ToCharArray ();
IList<string> uniques = new List<string>();
var combinations = new Combinations<char> (inputSet, 4, GenerateOption.WithoutRepetition);
foreach (var combination in combinations) {
var permutations = new Permutations<char> (combination, GenerateOption.WithoutRepetition);
foreach (IList<char> permutation in permutations) {
string token = new string (permutation.ToArray(), 0, 4);
if (!uniques.Contains(token))
uniques.Add(token);
}
}
}
}
}
どんな提案でも大歓迎です:)