--- /dev/null
+\r
+:- use_module(library(clpfd)).\r
+\r
+\r
+% relly(PC, I, PCnext, Inext).\r
+\r
+initial_state :- relly(start, 0, _, _).\r
+\r
+relly(start, _I, middle, Inext) :- Inext in 0..1000.\r
+relly(middle, I, done, Inext) :- Inext #= I + 1.\r
+\r
+\r
+% next(PC, I) :- \r
+next(done, _).\r
+next(PC, I) :- PC \= done, relly(PC, I, PCnext, Inext), next(PCnext, Inext).\r
+\r
+\r
+% ?- relly(start, 17, middle, 534).\r
+% true.\r
+\r
+% ?- relly(middle, 534, 77, done).\r
+% false.\r
+\r
+% ?- initial_state.\r
+% true.\r
+\r
+% ?- relly(start, 0, PC, I).\r
+% PC = middle,\r
+% I in 0..1000.\r
+\r
+% ?- relly(start, 0, PC, I), relly(PC, I, PCnext, Inext).\r
+% PC = middle,\r
+% PCnext = done,\r
+% I in 0..1000,\r
+% I+1#=Inext,\r
+% Inext in 1..1001.\r
+\r
+\r
+\r
+type_ok(Small, Big) :- Small in 0..3, Big in 0..5.\r
+\r
+initi :- die_hard(0, 0, _, _).\r
+\r
+next_dh(Small, Big, S, B) :-\r
+ B #\= 4,\r
+ type_ok(Small, Big),\r
+ die_hard(Small, Big, Si, Bi),\r
+ write(Small), write(" "), write(Big), write(" -> "), write(Si), write(" "), writeln(Bi),\r
+ (Bi = 4 -> true ; next_dh(Si, Bi, S, B)).\r
+next_dh(_, _, _, 4).\r
+\r
+\r
+\r
+% die_hard(Small, Big, S, B).\r
+die_hard(Small, Big, 3, Big) :- Small #\= 3, writeln("fill small"). % Fill small.\r
+die_hard(Small, Big, Small, 5) :- Big #\= 5, writeln("fill big"). % Fill big.\r
+\r
+die_hard(Small, Big, 0, Big) :- Small #> 0, writeln("empty small"). % empty small.\r
+die_hard(Small, Big, Small, 0) :- Big #> 0, writeln("empty big"). % empty big.\r
+\r
+die_hard(Small, Big, 0, B) :- % small to big.\r
+ Big #< 5, Small #> 0,\r
+ Small + Big #=< 5,\r
+ B is Small + Big, writeln("small to big"). \r
+die_hard(Small, Big, S, 5) :- % small to big.\r
+ Big #< 5, Small #> 0,\r
+ Small + Big #> 5,\r
+ N is 5 - Big,\r
+ (N #< Small -> S is Small - N ; S=0), writeln("small to big"). \r
+\r
+die_hard(Small, Big, S, 0) :- % big to small.\r
+ Small #< 3, Big #> 0,\r
+ Small + Big #=< 3,\r
+ S is Small + Big, writeln("big to small"). \r
+\r
+die_hard(Small, Big, 3, B) :- % big to small.\r
+ Small #< 3, Big #> 0,\r
+ Small + Big #> 3,\r
+ N is 3 - Small,\r
+ (N #< Big -> B is Big - N ; B=0), writeln("big to small"). \r
+\r
+/*\r
+\r
+call_with_depth_limit(next_dh(0, 0, S, B), 12, REsult).\r
+\r
+find...\r
+\r
+fill big\r
+0 0 -> 0 5\r
+big to small\r
+0 5 -> 3 2\r
+empty small\r
+3 2 -> 0 2\r
+big to small\r
+0 2 -> 2 0\r
+fill big\r
+2 0 -> 2 5\r
+big to small\r
+2 5 -> 3 4\r
+\r
+\r
+*/
\ No newline at end of file