private TwoByTwoResult Apply(Board board, Func <int, Cell[]> searchGroup, Func <Cell, int> searchID,
                              Group isolateType, Group eliminateType)
 {
     for (int k = 0; k < CellInfo.numbers; k++)
     {
         TwoByTwoResult result = Apply(board, k, searchGroup, searchID, isolateType, eliminateType);
         if (result != null)
         {
             return(result);
         }
     }
     return(null);
 }
        public override StrategyResult Apply(Board board, ref string outInfo)
        {
            TwoByTwoResult result = Apply(board, board.GetRow, cell => cell.Column, Group.Row, Group.Column);

            if (result != null)
            {
                return(result);
            }
            result = Apply(board, board.GetColumn, cell => cell.Row, Group.Column, Group.Row);
            if (result != null)
            {
                return(result);
            }
            return(null);
        }