private void ApplyTest(int[] set, int sum, List <List <int> > expected) { SubsetSum calculator = new SubsetSum(sum, set); List <List <int> > result = calculator.GetResult(); Assert.IsTrue(TestHelpers.Are2DListsEqual(expected, result)); }
public void RunTest() { var values = new List <int> { 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 16, 16, 16, 16, 20, 20, 20 }; var sum = 68; var actual = SubsetSum.Run(values, sum); var expectedCount = 32; Assert.Equal(expectedCount, actual.Count()); _output.WriteLine($"Count: {actual.Count()}"); foreach (var solution in actual) { _output.WriteLine(string.Join(" ", solution)); } }
public IEnumerable <ConnectorsCombinationModel> GetMinimalAmountOfConnectorsForMaxCurrentInAmps(int maxCurrentInAmps) { if (maxCurrentInAmps > CapacityInAmps || ChargeStations?.Any() == false) { return(Enumerable.Empty <ConnectorsCombinationModel>()); } var flatData = ChargeStations .SelectMany(x => x.Connectors, (chargeStation, connector) => new ConnectorModel { ChargeStationId = chargeStation.Id, ConnectorId = connector.Id, MaxCurrentInAmps = connector.MaxCurrentInAmps }); var subsets = SubsetSum.Solve(flatData, maxCurrentInAmps); var result = subsets.Select(x => new ConnectorsCombinationModel { Connectors = x, MaxCurrentInAmps = x.Sum(y => y.MaxCurrentInAmps), NumberOfConnectors = x.Count() }); return(result); }
//public static void Main(string[] args) //{ // SemiPerfect semiPerfect = new SemiPerfect(); // bool sp1 = semiPerfect.IsSemiperfect(40); //true; // bool sp2 = semiPerfect.IsSemiperfect(70); //false; //} public bool IsSemiperfect(int n) { int[] divisors = GetDivisors(n); SubsetSum subsetSum = new SubsetSum(); // Call the problem array has subset with sum = given sum. return(subsetSum.IsSubsetWithGivenSumExists(divisors, n)); }
static void Main(string[] args) { List <int> testList = new List <int>(); for (int i = 1; i <= 1000; ++i) { testList.Add(1); } Console.WriteLine(SubsetSum.Find(testList, 0, 1000)); Console.WriteLine(SubsetSum.Find(new List <int>() { 1, 2, 3, 4, 5, 6 }, 0, 21)); }
static void Main(string[] args) { List <int> testList = new List <int>(); for (int i = 0; i < 1000; ++i) { testList.Add(1); } Console.WriteLine(SubsetSum.Find(testList, 1000)); foreach (int index in SubsetSum.GetLastResult(1000)) { Console.WriteLine(index); } }
public void ValidateAlgo(int[] nums, int sum, bool expected){ var subsetSum = new SubsetSum(); Assert.Equal(expected, subsetSum.TopDownSubSetSum(nums, sum)); }
public override void Execute(BaseGrid grid, ArchitectureStyle[] allArchitectureStyles, int[] architectureStylesMap, List <Block> blocks) { _allotments = new List <Allotment> (); foreach (Block block in blocks) { ArchitectureStyle architectureStyle = block.randomArchitectureStyle; int blockWidthInTiles = block.width / architectureStyle.tileWidth; int blockDepthInTiles = block.depth / architectureStyle.tileWidth; int[][] possibleWidths = SubsetSum.Combinations(Enumerable.Range(architectureStyle.minWidth + architectureStyle.spacing, architectureStyle.maxWidth + architectureStyle.spacing).ToArray(), blockWidthInTiles); int[][] possibleDepths = SubsetSum.Combinations(Enumerable.Range(architectureStyle.minDepth + architectureStyle.spacing, architectureStyle.maxDepth + architectureStyle.spacing).ToArray(), blockDepthInTiles); int[] widths = possibleWidths [UnityEngine.Random.Range(0, possibleWidths.Length)]; int[] depths = possibleDepths [UnityEngine.Random.Range(0, possibleDepths.Length)]; int startX = (int)block.center.x - block.width / 2; int startZ = (int)block.center.y - block.depth / 2; int zOffset = 0; for (int z2 = 0; z2 < depths.Length; z2++) { int xOffset = 0; int depthInTiles = depths [z2]; int depth = depthInTiles * architectureStyle.tileWidth; for (int x2 = 0; x2 < widths.Length; x2++) { int widthInTiles = widths [x2]; int width = widthInTiles * architectureStyle.tileWidth; if ((z2 == 0 || z2 == depths.Length - 1) || (x2 == 0 || x2 == widths.Length - 1)) { HashSet <Direction> freeFaces = new HashSet <Direction> (); if (z2 == 0) { freeFaces.Add(Direction.FRONT); } else if (z2 == depths.Length - 1) { freeFaces.Add(Direction.BACK); } if (x2 == 0) { freeFaces.Add(Direction.LEFT); } else if (x2 == widths.Length - 1) { freeFaces.Add(Direction.RIGHT); } _allotments.Add(new Allotment(startX + xOffset, startZ + zOffset, width, depth, widthInTiles, depthInTiles, freeFaces.ToArray(), architectureStyle)); } xOffset += width; } zOffset += depth; } } }