Toggle navigation
?
users online
Logout
Open hangout
Open chat for current file
:-use_rendering(table). flick(Grid,Color,Grid,0):- Grid = [F|_], F = [Color|_]. flick(Grid,Color,FGrid,Cant):- Grid = [F|_], F = [X|_], %crearGrilla(GridAux), adyacente(X,Color,Grid,0,0,FGrid,Cant). %rellenar(Grid,FGrid). %Crea la grilla vacia. %crearGrilla(-Grilla). crearGrilla([ [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_], [_,_,_,_,_,_,_,_,_,_,_,_,_,_] ]). %Recorre una lista y dado un indice, nos devuelve el elemento indicado por el indice. %recorrer(+Posicion,+Lista,-Elemento). recorrer(0,[H|_L],H). recorrer(N,[_H|L],E):- N1 is N-1, recorrer(N1,L,E). %Dado una posicion (i,j) y una grilla, nos retorna el elemento de la grilla aputado por esa posiciĆ³n (i,j). %getElemento(+Posicioni,+Posicionj,+Grilla,-Elemento). getElemento(I,J,Matriz,E):- recorrer(I,Matriz,L), recorrer(J,L,E). adyacente(ColorOrigen,ColorNuevo,Grilla,I,J,GrillaRes,CantPintado):- getElemento(I,J,Grilla,Elemento), ColorOrigen = Elemento, cambiarColorEnPosicion(ColorNuevo,Grilla,I,J,RTA), adyacenteAux(ColorOrigen,ColorNuevo,RTA,I,J,GrillaRes,Cant), CantPintado is Cant+1. adyacente(ColorOrigen,_ColorNuevo,Grilla,I,J,Grilla,0):- getElemento(I,J,Grilla,Elemento), ColorOrigen \= Elemento. adyacente(_ColorOrigen,_ColorNuevo,Grilla,I,J,Grilla,0):- getElemento(I,J,Grilla,Elemento), \+var(Elemento). adyacente(_ColorOrigen,_ColorNuevo,Grilla,I,J,_GrillaRes,0):- I<0; J<0; length(Grilla,LI), LI>=I; getFila(I,Grilla,L),length(L,LJ), LJ>=J. getFila(Pos,Grilla,L):- recorrer(Pos,Grilla,L). adyacenteAux(ColorOrigen,ColorNuevo,Grilla,I,J,Resultado,CantAdyacente):- Arriba is I+1, Abajo is I-1, Derecha is J+1, Izquierda is J-1, adyacente(ColorOrigen,ColorNuevo,Grilla,Abajo,J,RtaA,ContA), adyacente(ColorOrigen,ColorNuevo,RtaA,Arriba,J,RtaB,ContB), adyacente(ColorOrigen,ColorNuevo,RtaB,I,Derecha,RtaC,ContC), adyacente(ColorOrigen,ColorNuevo,RtaC,I,Izquierda,Resultado,ContD), CantAdyacente is ContA+ContB+ContC+ContD. reemplazarEnLista(0,E,[_X|XS],[E|XS]). reemplazarEnLista(N,E,[Z|XS],[Z|YS]):- N1 is N-1, reemplazarEnLista(N1,E,XS,YS). cambiarColorEnPosicion(Color,[G|Grid],X,0,[Rta|Grid]):- reemplazarEnLista(X,Color,G,Rta). cambiarColorEnPosicion(Color,[G|Grid],X,Y,[G|Rta]):- YY is Y-1, cambiarColorEnPosicion(Color,Grid,X,YY,Rta). rellenar([],[]). rellenar([L|Grid],[L1|GridResultado]):- rellenarAux(L,L1), rellenar(Grid,GridResultado). % RellenarAux rellenarAux([],[]). rellenarAux([_E|L],[E1|L1]):- \+var(E1), rellenarAux(L,L1). rellenarAux([E|L],[E|L1]):- rellenarAux(L,L1).