Conditional Selection with Limits on Repetition.
So it's Christmas, and your mum delegates you, for some mysterious
reason, to go buy nine (9) balloons - of any of the colours
red, orange, yellow, green, blue, indigo,
violet, pink, milk, white,- for home decoration.
But here's the catch. You are to buy:
-
a minimum of 1 red balloon
and a maximum of 4 red balloons;
-
a minimum of 1 orange balloon
and a maximum of 3 orange balloons;
-
a minimum of 1 yellow balloon
and a maximum of 2 yellow balloons;
-
a minimum of 1 green balloon
and a maximum of 4 green balloons;
-
a minimum of 1 blue balloon
and a maximum of 3 blue balloons;
-
a minimum of 1 indigo balloon
and a maximum of 2 indigo balloons;
-
a minimum of 1 violet balloon
and a maximum of 4 violet balloons;
-
a minimum of 1 pink balloon
and a maximum of 3 pink balloons;
-
a minimum of 1 gray balloon
and a maximum of 2 gray balloons;
-
a minimum of 1 white balloon
and a maximum of 4 white balloons.
With these conditions, every family member's favourite colour
is covered for, and the decoration mix is also kept lively.
This is quite a handful for you to handle...
Code for Limited Repetitive Selection in C#
The code for Selection with Conditioned Repetition will be
based on that for Selection with boundless Repetition.
All that is needed after Selection with limitless Repetition
is a Productive, as opposed to Summative, check
of the results from the Selection with unconditioned Repetition
for those options that meet our conditions.
This is how our Limited Repetitive Selection algorithm in C# will work.
Create a new class file;
Call it ConditionalSelection
.
Type out the adjoining C# code for Selection with Conditioned Repetition.
C# code for ConditionalSelection Class
using System;
using System.Collections.Generic;
namespace Miscellaneous
{
class ConditionalSelection : Selection
{
private List<string[]> final_elements;
public ConditionalSelection() : base()
{
}
public List<string[]> limitedSelection(string[] candidates, int size, int[] minimum, int[] maximum) {
final_elements = new List<string[]>();
groupSelection(candidates, size);
for (int i = 0; i < complete_group.Count; i++) {
bool state = false;
for (int j = 0; j < words.Length; j++) {
int count = 0, k = -1;
while ((k = Array.IndexOf(complete_group[i], words[j], ++k)) > -1) {
count++;
}
if (count >= minimum[j] && count <= maximum[j]) {
state = true;
}
else {
state = false;
break;
}
}
if (state) {
final_elements.Add(complete_group[i]);
}
}
return final_elements;
}
}
}
Main Class
using System;
using System.Collections.Generic;
using System.Linq;
namespace Miscellaneous
{
class Program
{
static void Main(string[] args)
{
string[] goods = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
ConditionalSelection choose = new ConditionalSelection();
List<string[]> result = choose.limitedSelection(goods, 4,
new int[] { 0, 0, 1, 0, 0, 1, 0, 0, 1, 0 }, new int[] { 4, 3, 2, 4, 3, 2, 4, 3, 2, 4 });
Console.Write("[ ");
foreach (string choice in choose.words)
{
Console.Write(choice + "; ");
}
Console.WriteLine("] conditioned selection " + choose.r + ":" + Environment.NewLine);
int i = 0;
foreach (string[] set in result)
{
Console.Write(++i + ": ");
foreach (string member in set)
{
Console.Write(member + "; ");
}
Console.WriteLine();
}
Console.WriteLine(Environment.NewLine + "Number of ways is " + result.Count + ".");
}
}
}