%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% dohvati(+Pozicija,?Element,?Polje) %% (izvedba nedostaje) %% Pronalazi prvi Element koji se nalazi %% na Polje-u u Pozicija-i %% Zna naci i Polje zadanog Element-a %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% potez(+Pozicija,?Element,?Od,?Do,-Nova) %% pronalazi poziciju Nova pomicanjem Element-a s polja %% Od na slobodno polje Do (na tom polju je element 'x') potez(Pozicija,Element,Redak1:Stupac,Redak2:Stupac,Nova):- dohvati(Pozicija,x,Redak2:Stupac), susjed(Redak2,Redak1), dohvati(Pozicija,Element,Redak1:Stupac), Manji is min(Redak1,Redak2), potez_stupac(Pozicija,Manji,Stupac,Nova). potez(Pozicija,Element,Redak:Stupac1,Redak:Stupac2,Nova):- dohvati(Pozicija,x,Redak:Stupac2), susjed(Stupac2,Stupac1), dohvati(Pozicija,Element,Redak:Stupac1), Manji is min(Stupac1,Stupac2), potez_redak(Pozicija,Redak,Manji,Nova). %% potez u stupcu potez_stupac( [Prvi, Drugi|Redci],0,Stupac, [NoviPrvi,NoviDrugi|Redci]):- !,zamijeni_nti(Prvi,Drugi,Stupac,NoviPrvi,NoviDrugi). potez_stupac([Prvi|Redci],N,Stupac,[Prvi|NoviRedci]):- N1 is N-1, potez_stupac(Redci,N1,Stupac,NoviRedci). %% potez u redku potez_redak([Prvi|Redci],0,Stupac,[NoviPrvi|Redci]):- !,zamijeni_susjede(Prvi,Stupac,NoviPrvi). potez_redak([Prvi|Redci],N,Stupac,[Prvi|NoviRedci]):- N1 is N-1, potez_redak(Redci,N1,Stupac,NoviRedci). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%susjed(+X, -Neighbour) susjed(X,N):- N is X+1; N is X-1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% zamijeni_susjede(+ListIn,+N,?ListOut) %% Mijenja polozaj N-tog i N+1-tog clana %% liste ListIn, a rezultat vraca u ListOut zamijeni_susjede([X,Y|T], 0, [Y,X|T]). zamijeni_susjede([H|T], N, [H|T2]):- N1 is N-1, zamijeni_susjede(T,N1,T2) . %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% zamijeni_nti(+Lijevi,+Desni,?N,+NoviLijevi,+NoviDesni) %% medusobna zamjena n-tih elemenata u listama Lijevi i Desni zamijeni_nti([Hl|Tl],[Hd|Td],0,[Hd|Tl],[Hl|Td]):-!. zamijeni_nti([Hl|Tl],[Hd|Td],N,[Hl|TlNovi],[Hd|TdNovi]):- N1 is N-1, zamijeni_nti(Tl,Td,N1,TlNovi,TdNovi).