public JsonResult EjecutaOperaciones(string hora, int[] operaciones, string ciclo, string excel, string hoja)
        {
            //-empalmes -preasignacion -otrosSemestres -algoritmo
            string res      = "<strong>Asignacion Fallida</strong>\n";
            string detalles = "";

            try
            {
                Conexion       c       = new Conexion(Conexion.datosConexion, Server.MapPath("~/Archivos/" + excel), ciclo);
                ListaVariables grupos  = new ListaVariables(c.Grupos_EmpiezanA(ciclo, Convert.ToInt32(hora), false));
                ListaSalones   salones = new ListaSalones(c, c.Salones(), Convert.ToInt32(hora));
                salones.SetHorarios(c, Ciclo);

                int        numero_Operacion = 0;
                IOperacion operacion        = null;

                foreach (int op in operaciones)
                {
                    numero_Operacion++;

                    switch ((byte)op)  //Fabrica abstracta
                    {
                    case (byte)EOperaciones.algoritmoGenetico:
                        operacion = new AlgoritmoGenetico(grupos, salones, Convert.ToInt32(hora), 100, 1000);
                        break;

                    case (byte)EOperaciones.empalmes:
                        operacion = new RevisionEmpalmes(grupos, salones);
                        break;

                    case (byte)EOperaciones.otrosSemestres:
                        operacion = new AsignacionOtrosSemestres(grupos, salones);
                        break;

                    case (byte)EOperaciones.preasignacion:
                        operacion = new AsignacionPreferencial(grupos, salones);
                        break;
                    }

                    if (operacion != null)
                    {
                        operacion.Ejecuta();
                        if (operacion.Resultado.Count != 0)
                        {
                            grupos.Actualiza(operacion.Resultado);
                            detalles += Grupos2Table(operacion.Resultado.OrderBy(g => g.Cve_espacio).ToList(), operacion.NombreOperacion);
                        }
                        else
                        {
                            detalles += string.Format("{0} sin grupos modificados", operacion.NombreOperacion);
                        }

                        detalles += "<br>";
                    }
                }

                c.Grupos_Carga(grupos, hoja, c.Materias_AsDictionary(), c.Profesores_AsDicctionary());

                res = string.Format("Asignacion de {0} completada<br>{1}", hora, detalles);
            }
            catch (Exception ex)
            {
                res += "\n" + ex.Message;
            }

            return(new JsonResult()
            {
                Data = res, JsonRequestBehavior = JsonRequestBehavior.AllowGet
            });
        }