using System.Collections.Generic;
public static void Main()
Console.WriteLine("NORMAL RUN STARTING:");
List<int> start = new List<int>{ 1, 2, 3, 4 };
List<List<int>> allSubset =GetCombination<int>(start, 2);
List<int> sumOfAllSubset = SubsetSum(allSubset);
sumOfAllSubset = ClearList(sumOfAllSubset);
Console.WriteLine(" {0} => {1} ", string.Join(", ", start), string.Join(", ", sumOfAllSubset));
Console.WriteLine("Exiting...");
static List<int> ClearList( List<int> DoublonList ) {
while (index < DoublonList.Count - 1)
if (DoublonList[index] == DoublonList[index + 1])
DoublonList.RemoveAt(index);
static List<int> SubsetSum(List<List<int>> Subsets) {
List<int> result = new List<int>();
Subsets.ForEach( s => result.Add(s.Sum()) );
public static List<List<T>> GetCombination<T>(List<T> inputList, int minimumItems = 1) {
int count = (int)Math.Pow(2, inputList.Count) - 1;
List<List<T>> result = new List<List<T>>(count + 1);
result.Add(new List<T>());
for (int i = 1; i <= count; i++)
List<T> combinason = new List<T>(inputList.Count);
for (int j = 0; j < inputList.Count; j++)
combinason.Add(inputList[j]);
if (combinason.Count >= minimumItems)