Skip to content

Instantly share code, notes, and snippets.

@dariogabriel113
Created September 7, 2018 17:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dariogabriel113/df4f255b0cb1d2ac1ee9e6a25ef00238 to your computer and use it in GitHub Desktop.
Save dariogabriel113/df4f255b0cb1d2ac1ee9e6a25ef00238 to your computer and use it in GitHub Desktop.
Estado atual de trabalho de IA
class Estado {
List<String> posicoes
int nome
Estado pai
static constraints = {
pai nullable: true
}
}
class Jogo8Controller {
def index() {
Estado estadoInicial = new Estado(nome: 0, posicoes: ["X", "2", "3", "4", "5", "1", "7", "8", "6"])
Estado estadoFinal = new Estado(nome: 0, posicoes: ["1", "2", "3", "4", "5", "6", "X", "7", "8"])
def abertos
def fechados
def estadoAtual = estadoInicial
println estadoAtual.posicoes.indexOf("X")
geraFilhos(estadoAtual)
// while (estadoAtual.posicoes.equals(estadoFinal.posicoes)) {
//
// }
return "/index"
}
def geraFilhos(Estado estadoAtual) {
String indicePosicaoVazia = estadoAtual.posicoes.indexOf("X")
List<Estado> estados = new ArrayList<Estado>()
List<String> listaPosicoesAtuais = new ArrayList<String>(estadoAtual.posicoes)
switch (indicePosicaoVazia) {
case "0":
List<String> listaPosicoesP0P1 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP0P3 = new ArrayList<String>(listaPosicoesAtuais)
Collections.swap(listaPosicoesP0P1, estadoAtual.posicoes.indexOf("X"), 1)
Collections.swap(listaPosicoesP0P3, estadoAtual.posicoes.indexOf("X"), 3)
Estado estadoP0P1 = new Estado(nome: estadoAtual + 1, posicoes: listaPosicoesP0P1, pai: estadoAtual)
Estado estadoP0P3 = new Estado(nome: estadoP0P1 + 1, posicoes: listaPosicoesP0P3, pai: estadoAtual)
estados.add(estadoP0P1)
estados.add(estadoP0P3)
break;
case "1":
List<String> listaPosicoesP1P0 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP1P2 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP1P4 = new ArrayList<String>(listaPosicoesAtuais)
Collections.swap(listaPosicoesP1P0, estadoAtual.posicoes.indexOf("X"), 0)
Collections.swap(listaPosicoesP1P2, estadoAtual.posicoes.indexOf("X"), 2)
Collections.swap(listaPosicoesP1P4, estadoAtual.posicoes.indexOf("X"), 4)
Estado estadoP1P0 = new Estado(nome: estadoAtual + 1, posicoes: listaPosicoesP1P0, pai: estadoAtual)
Estado estadoP1P2 = new Estado(nome: estadoP1P0 + 1, posicoes: listaPosicoesP1P2, pai: estadoAtual)
Estado estadoP1P4 = new Estado(nome: estadoP1P2 + 1, posicoes: listaPosicoesP1P4, pai: estadoAtual)
estados.add(estadoP1P0)
estados.add(estadoP1P2)
estados.add(estadoP1P4)
break;
case "2":
List<String> listaPosicoesP0P1 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP0P3 = new ArrayList<String>(listaPosicoesAtuais)
Collections.swap(listaPosicoesP0P1, estadoAtual.posicoes.indexOf("X"), 1)
Collections.swap(listaPosicoesP0P3, estadoAtual.posicoes.indexOf("X"), 3)
Estado estadoP0P1 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP0P1, pai: estadoAtual)
Estado estadoP0P3 = new Estado(nome: estadoP0P1 + 1 + "A", posicoes: listaPosicoesP0P3, pai: estadoAtual)
estados.add(estadoP0P1)
estados.add(estadoP0P3)
break;
case "3":
List<String> listaPosicoesP0P1 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP0P3 = new ArrayList<String>(listaPosicoesAtuais)
Collections.swap(listaPosicoesP0P1, estadoAtual.posicoes.indexOf("X"), 1)
Collections.swap(listaPosicoesP0P3, estadoAtual.posicoes.indexOf("X"), 3)
Estado estadoP0P1 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP0P1, pai: estadoAtual)
Estado estadoP0P3 = new Estado(nome: estadoP0P1 + 1 + "A", posicoes: listaPosicoesP0P3, pai: estadoAtual)
estados.add(estadoP0P1)
estados.add(estadoP0P3)
break;
case "4":
List<String> listaPosicoesP0P1 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP0P3 = new ArrayList<String>(listaPosicoesAtuais)
Collections.swap(listaPosicoesP0P1, estadoAtual.posicoes.indexOf("X"), 1)
Collections.swap(listaPosicoesP0P3, estadoAtual.posicoes.indexOf("X"), 3)
Estado estadoP0P1 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP0P1, pai: estadoAtual)
Estado estadoP0P3 = new Estado(nome: estadoP0P1 + 1 + "A", posicoes: listaPosicoesP0P3, pai: estadoAtual)
estados.add(estadoP0P1)
estados.add(estadoP0P3)
break;
case "5":
List<String> listaPosicoesP0P1 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP0P3 = new ArrayList<String>(listaPosicoesAtuais)
Collections.swap(listaPosicoesP0P1, estadoAtual.posicoes.indexOf("X"), 1)
Collections.swap(listaPosicoesP0P3, estadoAtual.posicoes.indexOf("X"), 3)
Estado estadoP0P1 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP0P1, pai: estadoAtual)
Estado estadoP0P3 = new Estado(nome: estadoP0P1 + 1 + "A", posicoes: listaPosicoesP0P3, pai: estadoAtual)
estados.add(estadoP0P1)
estados.add(estadoP0P3)
break;
case "6":
List<String> listaPosicoesP0P1 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP0P3 = new ArrayList<String>(listaPosicoesAtuais)
Collections.swap(listaPosicoesP0P1, estadoAtual.posicoes.indexOf("X"), 1)
Collections.swap(listaPosicoesP0P3, estadoAtual.posicoes.indexOf("X"), 3)
Estado estadoP0P1 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP0P1, pai: estadoAtual)
Estado estadoP0P3 = new Estado(nome: estadoP0P1 + 1 + "A", posicoes: listaPosicoesP0P3, pai: estadoAtual)
estados.add(estadoP0P1)
estados.add(estadoP0P3)
break;
case "7":
List<String> listaPosicoesP0P1 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP0P3 = new ArrayList<String>(listaPosicoesAtuais)
Collections.swap(listaPosicoesP0P1, estadoAtual.posicoes.indexOf("X"), 1)
Collections.swap(listaPosicoesP0P3, estadoAtual.posicoes.indexOf("X"), 3)
Estado estadoP0P1 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP0P1, pai: estadoAtual)
Estado estadoP0P3 = new Estado(nome: estadoP0P1 + 1 + "A", posicoes: listaPosicoesP0P3, pai: estadoAtual)
estados.add(estadoP0P1)
estados.add(estadoP0P3)
break;
case "8":
List<String> listaPosicoesP0P1 = new ArrayList<String>(listaPosicoesAtuais)
List<String> listaPosicoesP0P3 = new ArrayList<String>(listaPosicoesAtuais)
Collections.swap(listaPosicoesP0P1, estadoAtual.posicoes.indexOf("X"), 1)
Collections.swap(listaPosicoesP0P3, estadoAtual.posicoes.indexOf("X"), 3)
Estado estadoP0P1 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP0P1, pai: estadoAtual)
Estado estadoP0P3 = new Estado(nome: estadoP0P1 + 1 + "A", posicoes: listaPosicoesP0P3, pai: estadoAtual)
estados.add(estadoP0P1)
estados.add(estadoP0P3)
break;
default:
println "Erro"
}
println estados
}
}
@AdrianoASJ
Copy link

class Jogo8Controller {

def index() {
    Estado estadoInicial = new Estado(nome: 0, posicoes: ["X", "2", "3", "4", "5", "1", "7", "8", "6"])
    Estado estadoFinal = new Estado(nome: 0, posicoes: ["1", "2", "3", "4", "5", "6", "X", "7", "8"])

    def abertos
    def fechados

    def estadoAtual = estadoInicial

    println estadoAtual.posicoes.indexOf("X")

    geraFilhos(estadoAtual)

// while (estadoAtual.posicoes.equals(estadoFinal.posicoes)) {
//
// }

    return "/index"
}

def geraFilhos(Estado estadoAtual) {
    String indicePosicaoVazia = estadoAtual.posicoes.indexOf("X")
    List<Estado> estados = new ArrayList<Estado>()

    List<String> listaPosicoesAtuais = new ArrayList<String>(estadoAtual.posicoes)

    switch (indicePosicaoVazia) {
        case "0":
            List<String> listaPosicoesP0P1 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP0P3 = new ArrayList<String>(listaPosicoesAtuais)

            Collections.swap(listaPosicoesP0P1, estadoAtual.posicoes.indexOf("X"), 1)
            Collections.swap(listaPosicoesP0P3, estadoAtual.posicoes.indexOf("X"), 3)

            Estado estadoP0P1 = new Estado(nome: estadoAtual + 1, posicoes: listaPosicoesP0P1, pai: estadoAtual)
            Estado estadoP0P3 = new Estado(nome: estadoP0P1 + 1, posicoes: listaPosicoesP0P3, pai: estadoAtual)

            estados.add(estadoP0P1)
            estados.add(estadoP0P3)

            break;
        case "1":
            List<String> listaPosicoesP1P0 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP1P2 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP1P4 = new ArrayList<String>(listaPosicoesAtuais)

            Collections.swap(listaPosicoesP1P0, estadoAtual.posicoes.indexOf("X"), 0)
            Collections.swap(listaPosicoesP1P2, estadoAtual.posicoes.indexOf("X"), 2)
            Collections.swap(listaPosicoesP1P4, estadoAtual.posicoes.indexOf("X"), 4)

            Estado estadoP1P0 = new Estado(nome: estadoAtual + 1, posicoes: listaPosicoesP1P0, pai: estadoAtual)
            Estado estadoP1P2 = new Estado(nome: estadoP1P0 + 1, posicoes: listaPosicoesP1P2, pai: estadoAtual)
            Estado estadoP1P4 = new Estado(nome: estadoP1P2 + 1, posicoes: listaPosicoesP1P4, pai: estadoAtual)

            estados.add(estadoP1P0)
            estados.add(estadoP1P2)
            estados.add(estadoP1P4)

            break;
        case "2":
            List<String> listaPosicoesP2P1 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP2P5 = new ArrayList<String>(listaPosicoesAtuais)
            

            Collections.swap(listaPosicoesP2P1, estadoAtual.posicoes.indexOf("X"), 1)
            Collections.swap(listaPosicoesP2P5, estadoAtual.posicoes.indexOf("X"), 5)

            Estado estadoP2P1 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP2P1, pai: estadoAtual)
            Estado estadoP2P5 = new Estado(nome: estadoP2P1 + 1 + "A", posicoes: listaPosicoesP2P5, pai: estadoAtual)

            estados.add(estadoP2P1)
            estados.add(estadoP2P5)

            break;
        case "3":
            List<String> listaPosicoesP3P0 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP3P4 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP3P6 = new ArrayList<String>(listaPosicoesAtuais)
            

            Collections.swap(listaPosicoesP3P0, estadoAtual.posicoes.indexOf("X"), 0)
            Collections.swap(listaPosicoesP3P4, estadoAtual.posicoes.indexOf("X"), 4)
            Collections.swap(listaPosicoesP3P6, estadoAtual.posicoes.indexOf("X"), 6)

            Estado estadoP3P0 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP3P0, pai: estadoAtual)
            Estado estadoP3P4 = new Estado(nome: estadoP3P0 + 1 + "A", posicoes: listaPosicoesP3P4, pai: estadoAtual)
            Estado estadoP3P6 = new Estado(nome: estadoP3P4 + 1 + "A", posicoes: listaPosicoesP3P6, pai: estadoAtual)

            estados.add(estadoP3P0)
            estados.add(estadoP3P4)
            estados.add(estadoP3P6)

            break;
        case "4":
            List<String> listaPosicoesP4P1 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP4P3 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP4P5 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP4P7 = new ArrayList<String>(listaPosicoesAtuais)

            Collections.swap(listaPosicoesP4P1, estadoAtual.posicoes.indexOf("X"), 1)
            Collections.swap(listaPosicoesP4P3, estadoAtual.posicoes.indexOf("X"), 3)
            Collections.swap(listaPosicoesP4P5, estadoAtual.posicoes.indexOf("X"), 5)
            Collections.swap(listaPosicoesP4P7, estadoAtual.posicoes.indexOf("X"), 7)

            Estado estadoP4P1 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP4P1, pai: estadoAtual)
            Estado estadoP4P3 = new Estado(nome: estadoP4P1 + 1 + "A", posicoes: listaPosicoesP4P3, pai: estadoAtual)
            Estado estadoP4P5 = new Estado(nome: estadoP4P3 + 1 + "A", posicoes: listaPosicoesP4P5, pai: estadoAtual)
            Estado estadoP4P7 = new Estado(nome: estadoP4P5 + 1 + "A", posicoes: listaPosicoesP4P7, pai: estadoAtual)

            estados.add(estadoP4P1)
            estados.add(estadoP4P3)
            estados.add(estadoP4P5)
            estados.add(estadoP4P7)


            break;
        case "5":
            List<String> listaPosicoesP5P2 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP5P4 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP5P8 = new ArrayList<String>(listaPosicoesAtuais)

            Collections.swap(listaPosicoesP5P2, estadoAtual.posicoes.indexOf("X"), 2)
            Collections.swap(listaPosicoesP5P4, estadoAtual.posicoes.indexOf("X"), 4)
            Collections.swap(listaPosicoesP5P8, estadoAtual.posicoes.indexOf("X"), 8)

            Estado estadoP5P2 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP5P2, pai: estadoAtual)
            Estado estadoP5P4 = new Estado(nome: estadoP5P2 + 1 + "A", posicoes: listaPosicoesP5P4, pai: estadoAtual)
            Estado estadoP5P8 = new Estado(nome: estadoP5P4 + 1 + "A", posicoes: listaPosicoesP5P8, pai: estadoAtual)

            estados.add(estadoP5P2)
            estados.add(estadoP5P4)
            estados.add(estadoP5P8)

            break;
        case "6":
            List<String> listaPosicoesP6P3 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP6P7 = new ArrayList<String>(listaPosicoesAtuais)

            Collections.swap(listaPosicoesP6P3, estadoAtual.posicoes.indexOf("X"), 3)
            Collections.swap(listaPosicoesP6P7, estadoAtual.posicoes.indexOf("X"), 7)

            Estado estadoP6P3 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP6P3, pai: estadoAtual)
            Estado estadoP6P7 = new Estado(nome: estadoP6P3 + 1 + "A", posicoes: listaPosicoesP6P7, pai: estadoAtual)

            estados.add(estadoP6P3)
            estados.add(estadoP6P7)

            break;
        case "7":
            List<String> listaPosicoesP7P4 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP7P6 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP7P8 = new ArrayList<String>(listaPosicoesAtuais)

            Collections.swap(listaPosicoesP7P4, estadoAtual.posicoes.indexOf("X"), 4)
            Collections.swap(listaPosicoesP7P6, estadoAtual.posicoes.indexOf("X"), 6)
            Collections.swap(listaPosicoesP7P8, estadoAtual.posicoes.indexOf("X"), 8)

            Estado estadoP7P4 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP7P4, pai: estadoAtual)
            Estado estadoP7P6 = new Estado(nome: estadoP7P4 + 1 + "A", posicoes: listaPosicoesP7P6, pai: estadoAtual)
            Estado estadoP7P8 = new Estado(nome: estadoP7P6 + 1 + "A", posicoes: listaPosicoesP7P8, pai: estadoAtual)

            estados.add(estadoP7P4)
            estados.add(estadoP7P6)
            estados.add(estadoP7P8)

            break;
        case "8":
            List<String> listaPosicoesP8P5 = new ArrayList<String>(listaPosicoesAtuais)
            List<String> listaPosicoesP8P7 = new ArrayList<String>(listaPosicoesAtuais)
            

            Collections.swap(listaPosicoesP8P5, estadoAtual.posicoes.indexOf("X"), 5)
            Collections.swap(listaPosicoesP8P7, estadoAtual.posicoes.indexOf("X"), 7)

            Estado estadoP8P5 = new Estado(nome: estadoAtual + 1 + "A", posicoes: listaPosicoesP8P5, pai: estadoAtual)
            Estado estadoP8P7 = new Estado(nome: estadoP8P5 + 1 + "A", posicoes: listaPosicoesP8P7, pai: estadoAtual)

            estados.add(estadoP8P5)
            estados.add(estadoP8P7)

            break;
        default:
            println "Erro"
    }

    println estados
}

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment