Example #1
0
        public Specimen Execute(Specimen specimen)
        {
            var toBeChanged =
                specimen.Problem.Lines.Select(line => specimen.Random.NextDouble())
                    .Select(rolled => rolled < _chance ? 1 : 0)
                    .ToList();

            for (var i = 0; i < specimen.Problem.Lines.Count; i++)
            {
                if (toBeChanged[i] != 1) continue;
                var busses = specimen.Distribution.Sum();
                var max = specimen.Problem.NumberOfBuses - busses;
                var min = -(specimen.Distribution[i] - 1);
                if (min < max)
                {
                    specimen.Distribution[i] += specimen.Random.Next(min, max);
                }
            }
            specimen.CalculateSpecimentValue();
            return specimen;
        }