Пример #1
0
        public void GenerarHijos()
        {
            List <String> listaDerecha;
            List <String> listaIzquierda;

            if (Farola) // FAROLA DERECHA
            {
                // CASO 1
                // PASA A - B
                // VALIDAR
                if (EsValido(1))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaDerecha.RemoveAll((p => p == "A" || p == "B"));
                    listaIzquierda.AddRange(new string[] { "A", "B" });
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, false, MinutosAcumulados + 2));
                }

                // CASO 2
                // PASA A - C
                // VALIDAR
                if (EsValido(2))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaDerecha.RemoveAll((p => p == "A" || p == "C"));
                    listaIzquierda.AddRange(new string[] { "A", "C" });
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, false, MinutosAcumulados + 5));
                }

                // CASO 3
                // PASA A - D
                // VALIDAR
                if (EsValido(3))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaDerecha.RemoveAll((p => p == "A" || p == "D"));
                    listaIzquierda.AddRange(new string[] { "A", "D" });
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, false, MinutosAcumulados + 10));
                }

                // CASO 4
                // PASA B - C
                // VALIDAR
                if (EsValido(4))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaDerecha.RemoveAll((p => p == "B" || p == "C"));
                    listaIzquierda.AddRange(new string[] { "B", "C" });
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, false, MinutosAcumulados + 5));
                }

                // CASO 5
                // PASA B - D
                // VALIDAR
                if (EsValido(5))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaDerecha.RemoveAll((p => p == "B" || p == "D"));
                    listaIzquierda.AddRange(new string[] { "B", "D" });
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, false, MinutosAcumulados + 10));
                }

                // CASO 6
                // PASA C - D
                // VALIDAR
                if (EsValido(6))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaDerecha.RemoveAll((p => p == "C" || p == "D"));
                    listaIzquierda.AddRange(new string[] { "C", "D" });
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, false, MinutosAcumulados + 10));
                }
            }
            else // FAROLA IZQUIERDA
            {
                // CASO 7
                // PASA A
                // VALIDAR
                if (EsValido(7))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaIzquierda.Remove("A");
                    listaDerecha.Add("A");
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, true, MinutosAcumulados + 1));
                }

                // CASO 8
                // PASA B
                // VALIDAR
                if (EsValido(8))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaIzquierda.Remove("B");
                    listaDerecha.Add("B");
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, true, MinutosAcumulados + 2));
                }

                // CASO 9
                // PASA C
                // VALIDAR
                if (EsValido(9))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaIzquierda.Remove("C");
                    listaDerecha.Add("C");
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, true, MinutosAcumulados + 5));
                }

                // CASO 10
                // PASA D
                // VALIDAR
                if (EsValido(10))
                {
                    // COPIAR LISTA
                    listaDerecha   = LadoDerecha.ToList();
                    listaIzquierda = LadoIzquierda.ToList();
                    // ELIMINAR ELEMENTOS
                    listaIzquierda.Remove("D");
                    listaDerecha.Add("D");
                    // AGREGAR A LOS HIJOS
                    Hijos.Add(new State(listaDerecha, listaIzquierda, true, MinutosAcumulados + 10));
                }
            }
        }
Пример #2
0
        public bool EsValido(int caso)
        {
            String resultado1;
            String resultado2;

            switch (caso)
            {
            // CASO 1
            // PASA A - B
            case 1:
                if (Farola)    // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "A");
                    resultado2 = LadoDerecha.Find(s => s == "B");

                    if (resultado1 != null && resultado2 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                return(false);    // IZQUIERDA

            // CASO 2
            // PASA A - C
            case 2:
                if (Farola)     // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "A");
                    resultado2 = LadoDerecha.Find(s => s == "C");

                    if (resultado1 != null && resultado2 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                return(false);    // IZQUIERDA

            // CASO 3
            // PASA A - D
            case 3:
                if (Farola)     // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "A");
                    resultado2 = LadoDerecha.Find(s => s == "D");

                    if (resultado1 != null && resultado2 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                return(false);    // IZQUIERDA

            // CASO 4
            // PASA B - C
            case 4:
                if (Farola)     // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "B");
                    resultado2 = LadoDerecha.Find(s => s == "C");

                    if (resultado1 != null && resultado2 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                return(false);    // IZQUIERDA

            // CASO 5
            // PASA B - D
            case 5:
                if (Farola)     // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "B");
                    resultado2 = LadoDerecha.Find(s => s == "D");

                    if (resultado1 != null && resultado2 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                return(false);    // IZQUIERDA

            // CASO 6
            // PASA C - D
            case 6:
                if (Farola)     // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "C");
                    resultado2 = LadoDerecha.Find(s => s == "D");

                    if (resultado1 != null && resultado2 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                return(false);    // IZQUIERDA

            // CASO 7
            // PASA A
            case 7:
                if (Farola)     // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "A");

                    if (resultado1 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                else     // IZQUIERDA
                {
                    resultado1 = LadoIzquierda.Find(s => s == "A");

                    if (resultado1 != null)
                    {
                        return(true);
                    }
                    return(false);
                }

            // CASO 8
            // PASA B
            case 8:
                if (Farola)     // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "B");

                    if (resultado1 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                else     // IZQUIERDA
                {
                    resultado1 = LadoIzquierda.Find(s => s == "B");

                    if (resultado1 != null)
                    {
                        return(true);
                    }
                    return(false);
                }

            // CASO 9
            // PASA C
            case 9:
                if (Farola)     // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "C");

                    if (resultado1 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                else     // IZQUIERDA
                {
                    resultado1 = LadoIzquierda.Find(s => s == "C");

                    if (resultado1 != null)
                    {
                        return(true);
                    }
                    return(false);
                }

            // CASO 10
            // PASA D
            case 10:
                if (Farola)     // DERECHA
                {
                    resultado1 = LadoDerecha.Find(s => s == "D");

                    if (resultado1 != null)
                    {
                        return(true);
                    }
                    return(false);
                }
                else     // IZQUIERDA
                {
                    resultado1 = LadoIzquierda.Find(s => s == "D");

                    if (resultado1 != null)
                    {
                        return(true);
                    }
                    return(false);
                }

            default:
                return(false);    // GRACIAS COMPILADOR
            }
        }