private void SolveBackEdge(Block block) { var nonBackSide = GetSideToRotate(block, Side.Back); var nonWhiteColour = (block.Back == Colour.White ? block.GetColour(nonBackSide) : block.Back) ?? throw new ArgumentException("Edge blocks must have a white and a non-white side."); if (block.Back == nonWhiteColour) { ReOrientateBackEdge(nonBackSide); block = _cube.GetBlock(block); } while (!BackEdgeIsOnCorrectSide(block, nonWhiteColour)) { _cube.RotateClockwise(Side.Back); block = _cube.GetBlock(block); } var layer = block.GetLayer(nonWhiteColour) ?? throw new Exception(); _cube.RotateClockwise(layer); _cube.RotateClockwise(layer); }