lunes, diciembre 13, 2010

Paréntesis Balanceados - Problema UVA 673 - Groovy

La solución en groovy al problema de paréntesis balanceados presentado anteriormente, simplifica parte del código, en lo concerniente a la definición de clases, importación de librerías de clases y la declaración de variables. Sin embargo, el código central de evaluación de una cadena es prácticamente el mismo que en java, con la excepción de la utilización de un arreglo para manejar la pila y la palabra "times" para la ejecución de un ciclo por un determinado número de veces:

def evaluarCadena = { cadena ->
    pila = []
    for(c in cadena) {
        if(c=='[' || c=='(') { pila = pila + c; continue }
        if(pila.size()==0) return false
        x = pila[-1]            // Obtiene el último elemeno
        pila[-1]="#"            // Reemplaza el último por "#"
        pila = pila-pila[-1]    // Elimina de la colección todos los "#"
        if(c==')' && x!='(' ) return false
        if(c==']' && x!='[' ) return false
    }
    if(pila.size() > 0) false
    else true
}

input = new BufferedReader(new InputStreamReader(System.in))
numeroCasos = Integer.parseInt(input.readLine());
numeroCasos.times {
    boolean respuesta = evaluarCadena(input.readLine());
    if(respuesta==true) System.out.println("Yes");
    if(respuesta==false) System.out.println("No");
}

2 comentarios:

Multiprocesamiento recursivo en JAVA 7

Una de las estrategias de diseño de algoritmos más comunes es la de "divide y vencerás", en la cual, un problema de tamaño relativ...