Beispiel #1
0
        public static IEnumerable <T> PickFrom(IEnumerable <T> selection, int howMany, ISelectValue randomness)
        {
            if (howMany > selection.Count())
            {
                throw new ArgumentOutOfRangeException("howMany", "Count cannot be more the number of values");
            }

            var list             = selection.ToList();
            var randomCandidates = new List <T>();

            for (int i = 0; i < howMany; ++i)
            {
                int randomIndex = randomness.BetweenZeroAnd(list.Count);

                T candidateSolution = list[randomIndex];
                randomCandidates.Add(candidateSolution);

                list.Remove(candidateSolution);
            }

            return(randomCandidates);
        }
        public static Fingering CreateFingeringFor(this FingerboardInstrument instrument, Melody piece, ISelectValue randomness)
        {
            var notes = piece.Notes;

            var fingering = new Fingering();

            foreach (Note p in notes)
            {
                var possibleAlternatives = instrument.PositionsFor(p);

                int            randomIndex = randomness.BetweenZeroAnd(possibleAlternatives.Count - 1);
                FingerPosition selected    = possibleAlternatives[randomIndex];

                fingering.Add(new FingerPosition(selected.Fret, selected.String));
            }

            return(fingering);
        }