All pastes #2023243 Raw Edit

Unnamed

public text v1 · immutable
#2023243 ·published 2010-12-19 02:36 UTC
rendered paste body
szklanka(0). % pozycja: na dol
szklanka(1). % pozycja: w gore


szklanki([A,B,C,D]) :- % +-+-+
	szklanka(A),   % |A|B|
	szklanka(B),   % +-+-+
	szklanka(C),   % |C|D|
	szklanka(D).   % +-+-+

obrocone([A,B,C,D], [C,A,D,B]).



kolejka1([_,B,C,_], [1,B,C,1]).

kolejka2([1,0,C,D], [1,1,C,D]).
kolejka2([0,1,C,D], [1,1,C,D]).
kolejka2([1,1,C,D], [1,1,C,D]).

kolejka3([0,B,C,1], [1,B,C,1]).
kolejka3([1,B,C,0], [1,B,C,1]).
kolejka3([1,B,C,1], [0,B,C,1]).

kolejka4([0,0,C,D], [1,1,C,D]).
kolejka4([0,1,C,D], [1,0,C,D]).
kolejka4([1,0,C,D], [0,1,C,D]).
kolejka4([1,1,C,D], [0,0,C,D]).

kolejka5([0,B,C,0], [1,B,C,1]).
kolejka5([0,B,C,1], [1,B,C,0]).
kolejka5([1,B,C,0], [0,B,C,1]).
kolejka5([1,B,C,1], [0,B,C,0]).



algorytm(Algorytm) :-
	forall(szklanki(Szklanki),               % dla wszystkich konfiguracyj szklanek...
	       zastosuj(Algorytm, 0, Szklanki)). % sprawdzamy czy algorytm sie zakonczy


zastosuj(_, _, [0,0,0,0]) :- !.
zastosuj(_, _, [1,1,1,1]) :- !.

zastosuj([Kolejka|Kolejki], N, Szklanki0) :-
	
	naglowek(Kolejka,N),
	formatuj(Szklanki0),
	
	call(Kolejka, Szklanki0, Szklanki1),
	
	formatuj(Szklanki1), nl,
	M is N+1,
	
	obrocone(Szklanki1, Szklanki2),
	obrocone(Szklanki2, Szklanki3),
	obrocone(Szklanki3, Szklanki4),
	
	zastosuj(Kolejki,M, Szklanki1),
	zastosuj(Kolejki,M, Szklanki2),
	zastosuj(Kolejki,M, Szklanki3),
	zastosuj(Kolejki,M, Szklanki4).


naglowek(Algorytm0, Poziom) :-
	writef('%t', [Algorytm0]),
	writef(' ', []),
	writef('%r', ['        ', Poziom]).


formatuj(Szklanki) :-
	writef('[%t%t/%t%t] ', Szklanki).


testwiki :- algorytm([kolejka1, kolejka2, kolejka3, kolejka4, kolejka5]).