Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class RandomGenerator
- {
- public static IEnumerable<int> Generate(int min, int max, int count)
- {
- long rangeLength = max - min + 1;
- if (rangeLength < count)
- {
- throw new Exception("You can't take more elements than range length");
- }
- if (count == 0)
- {
- yield break;
- }
- Random r = new Random();
- int interval = (int) (rangeLength / count);
- List<int> list = new List<int>(count);
- while (count > 0)
- {
- int elementsTakenFromInterval = Math.Max(r.Next(count), 1);
- if(elementsTakenFromInterval == 0)continue;
- count -= elementsTakenFromInterval;
- for (int i = 0; i < elementsTakenFromInterval; i++)
- {
- int random = r.Next(min, Math.Max(min + (elementsTakenFromInterval / interval), min + 1));
- min += Math.Max((elementsTakenFromInterval / interval), 1);
- list.Add(random);
- }
- }
- foreach (var value in list.Shuffle())
- {
- yield return value;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement