private Transposition GetIterateTransposition(InputData data) { var rod = new RodDto { Length = data.Rod.Length }; var blanks = data.Blanks.ToList(); var rand = new Random(); var transposition = new List <int>(); while (blanks.Any()) { var front = blanks .Where(x => x.Length < rod.Length) .ToList(); if (!front.Any()) { rod = new RodDto { Length = data.Rod.Length }; continue; } var skip = rand.Next(100) < skipPercent?rand.Next(front.Count) : 0; var blank = front .Skip(skip) .First(); transposition.Add(blank.Id); blanks.RemoveAll(x => x.Id == blank.Id); } return(new Transposition(transposition)); }
public InputData(int rod, IEnumerable <int> blanks) { Rod = new RodDto { Length = rod }; var nextId = 1; Blanks = blanks .Select(x => new BlankDto { Id = nextId++, Length = x }) .ToList(); }