/// <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; } }