/// <summary> /// Returns a shuffled IEnumerable. /// </summary> /// <typeparam name="T">The type of object being enumerated</typeparam> /// <param name="rand">An instance of a random number generator</param> /// <returns>A shuffled shallow copy of the source items</returns> public static IEnumerable <T> Shuffle <T>(this IEnumerable <T> source, CryptoRandomGenerator rand) { var list = source.ToList(); list.Shuffle(rand); return(list); }
/// <summary> /// Returns a random element from a list, or null if the list is empty. /// </summary> /// <typeparam name="T">The type of object being enumerated</typeparam> /// <param name="rand">An instance of a random number generator</param> /// <returns>A random element from a list, or null if the list is empty</returns> public static T Random <T>(this IEnumerable <T> list, CryptoRandomGenerator rand) { if (list != null && list.Count() > 0) { return(list.ElementAt(rand.Next(list.Count()))); } return(default(T)); }
/// <summary> /// Shuffles an IList in place. /// </summary> /// <typeparam name="T">The type of elements in the list</typeparam> /// <param name="rand">An instance of a random number generator</param> public static void Shuffle <T>(this IList <T> list, CryptoRandomGenerator rand) { int count = list.Count; while (count > 1) { int i = rand.Next(count--); T temp = list[count]; list[count] = list[i]; list[i] = temp; } }
public void Test() { //var lemerRandomGenerator = new GPSSRandomGenerator(3729); ////var lemerRandomGenerator = new SequenceMethodRandomGenerator(100011); //var lemerRandomGenerator = new LemerRandomGenerator(100011); var lemerRandomGenerator = new CryptoRandomGenerator(); //var uniformTest = new PokerTest(0, 9, 100); var uniformTest = new IntervalTest(0, 10, 10000, 500); for (var i = 0; i < 5; i++) { Console.WriteLine(uniformTest.Check(lemerRandomGenerator)); } }
public static string NewSecurePassword() { var UpperCharsSet = Enumerable.Range(65, 26).Select(i => (byte)i).ToArray(); // A..Z var LowerCharsSet = Enumerable.Range(97, 26).Select(i => (byte)i).ToArray(); // a..z var NumbersSet = Enumerable.Range(48, 10).Select(i => (byte)i).ToArray(); // 0..9 var SpecialCharsSet = new byte[] { 33, 35, 40, 41, 64 }; // !, #, (, ), @ var All = UpperCharsSet.Concat(LowerCharsSet).Concat(NumbersSet).Concat(SpecialCharsSet).ToArray(); using (var r = new CryptoRandomGenerator()) { int length = r.Next(32, 41); var u = Enumerable.Range(0, 5).Select(i => UpperCharsSet[r.Next(0, UpperCharsSet.Length)]); var l = Enumerable.Range(0, 1).Select(i => LowerCharsSet[r.Next(0, LowerCharsSet.Length)]); var n = Enumerable.Range(0, 1).Select(i => NumbersSet[r.Next(0, NumbersSet.Length)]); var s = Enumerable.Range(0, 4).Select(i => SpecialCharsSet[r.Next(0, SpecialCharsSet.Length)]); var a = Enumerable.Range(0, length - 11).Select(i => All[r.Next(0, All.Length)]); return(Encoding.ASCII.GetString(u.Concat(l).Concat(n).Concat(s).Concat(a).Shuffle().ToArray())); } }