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); }