private void FormYellowCross() { while (!RubixCubeStatusEvaluator.CrossFaceIsFormed(_cube, Side.Back)) { if (!CrossIsPartiallySolved()) { // Any rotation is fine here (providing the face matches the side) PerformFruRufRotations(Side.Right, Side.Bottom); } var crossBlocks = _cube.GetBackFaceCrossBlocks().ToList(); if (CrossIsCurrentlyAnArrow(crossBlocks)) { var sides = GetIncorrectCrossBlockSides(crossBlocks); var faceToRotate = GetFaceToRotate(sides); var sideToRotate = GetSideToRotate(faceToRotate); PerformFruRufRotations(faceToRotate, sideToRotate); } crossBlocks = _cube.GetBackFaceCrossBlocks().ToList(); if (CrossIsCurrentlyALine(crossBlocks)) { var faceToRotate = GetIncorrectCrossBlockSides(crossBlocks).First(); var sideToRotate = GetSideToRotate(faceToRotate); PerformFruRufRotations(faceToRotate, sideToRotate); } } }