usingMaths.com
From Theory to Practice - Math You Can Use.







<< PreviousNext >>

Code for Selection with Limits to Repetitions in C#



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:
  1. a minimum of 1 red balloon and a maximum of 4 red balloons;
  2. a minimum of 1 orange balloon and a maximum of 3 orange balloons;
  3. a minimum of 1 yellow balloon and a maximum of 2 yellow balloons;
  4. a minimum of 1 green balloon and a maximum of 4 green balloons;
  5. a minimum of 1 blue balloon and a maximum of 3 blue balloons;
  6. a minimum of 1 indigo balloon and a maximum of 2 indigo balloons;
  7. a minimum of 1 violet balloon and a maximum of 4 violet balloons;
  8. a minimum of 1 pink balloon and a maximum of 3 pink balloons;
  9. a minimum of 1 gray balloon and a maximum of 2 gray balloons;
  10. 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 C# 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++) {
                    // get 'words[j]' frequency/count in group
                    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;
                    }
                }
                // skip if already in net
                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,
                //      minimum number of occurrences           maximum number of occurrences
                new int[] { 0, 0, 1, 0, 0, 1, 0, 0, 1, 0 }, new int[] { 4, 3, 2, 4, 3, 2, 4, 3, 2, 4 });
            // print choices and operation
            Console.Write("[ ");
            foreach (string choice in choose.words)
            {
                Console.Write(choice + "; ");
            }
            Console.WriteLine("] conditioned selection " + choose.r + ":" + Environment.NewLine);
            // print out selections nicely
            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 + ".");
        }
    }
}



<< PreviousNext >>