Advertisement
Guest User

Untitled

a guest
Aug 30th, 2014
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.26 KB | None | 0 0
  1. public class RandomGenerator
  2.     {
  3.         public static IEnumerable<int> Generate(int min, int max, int count)
  4.         {
  5.             long rangeLength = max - min + 1;
  6.             if (rangeLength < count)
  7.             {
  8.                 throw new Exception("You can't take more elements than range length");
  9.             }
  10.             if (count == 0)
  11.             {
  12.                 yield break;
  13.             }
  14.             Random r = new Random();
  15.             int interval = (int) (rangeLength / count);
  16.             List<int> list = new List<int>(count);
  17.             while (count > 0)
  18.             {
  19.                 int elementsTakenFromInterval = Math.Max(r.Next(count), 1);
  20.                 if(elementsTakenFromInterval == 0)continue;
  21.                 count -= elementsTakenFromInterval;
  22.                 for (int i = 0; i < elementsTakenFromInterval; i++)
  23.                 {
  24.                     int random = r.Next(min, Math.Max(min + (elementsTakenFromInterval / interval), min + 1));
  25.                     min += Math.Max((elementsTakenFromInterval / interval), 1);
  26.                     list.Add(random);
  27.                 }
  28.             }
  29.             foreach (var value in list.Shuffle())
  30.             {
  31.                 yield return value;
  32.  
  33.             }
  34.         }
  35.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement