private static Cups PlayTurns(Cups circle, int turnsCount) { int Prev(int n) => n == 1 ? circle.Count : n - 1; for (int i = 0; i < turnsCount; i++) { var pickedUp = circle.ExtractNext3(); var destination = circle.FindNode(Prev(circle.CurrentValue)); while (pickedUp.Value == destination.Value || pickedUp.Next.Value == destination.Value || pickedUp.Next.Next.Value == destination.Value) { destination = circle.FindNode(Prev(destination.Value)); } circle.InsertRange3(destination, pickedUp); circle.MoveNext(); } return(circle); }