Exemple #1
0
        /// <summary>
        /// Overhand shuffles the list
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list">The list.</param>
        public static void OverhandShuffle <T>(this List <T> list)
        {
            var results = list.Select(t => t).ToList();
            var copied  = 0;

            while (copied != list.Count)
            {
                var toCopy = (int)Rand.BoxMuller(10, 3);
                if (copied + toCopy > list.Count)
                {
                    toCopy = list.Count - copied;
                }
                foreach (var i in Enumerable.Range(0, toCopy))
                {
                    list[list.Count - copied - toCopy + i] = results[copied + i];
                }
                copied += toCopy;
            }
        }