# PROLOG MORE PROBLEMS.

## Presentation on theme: "PROLOG MORE PROBLEMS."— Presentation transcript:

PROLOG MORE PROBLEMS

MAGIC PUZZLE 3 X 3 3 X 3 square Digits 1 to 9 All rows are equal to 15
All columns are equal to 15 Both diagonals are equal to 15

MAGIC PUZZLE 3 X 3 3 X 3 square X1 X2 X3 X4 X5 X6 X7 X8 X9

MAGIC PUZZLE 3 X 3 Basically only one solution (+symmetries) 2 7 6
Check it out: all totals are 15

MAGIC PUZZLE 3 X 3 All digits should be different
All digits are between 1 and 9 Set of equations: X1 + X2 + X3 = 15 (1st row) X4 + X5 + X6 = 15 (2nd row) X3 + X5 + X7 = 15 (opposite diagonal)

MAGIC PUZZLE 3 X 3 solve(X1,X2,X3,X4,X5,X6,X7,X8,X9) :-
member(X1,[1,2,3,4,5,6,7,8,9]), .. alldifferent([X1,X2,X3,….,X6,X7,X8,X9]), X1 + X2 + X3 =:= 15, X3 + X5 + X7 =:= 15.

MAGIC PUZZLE 3 X 3 Would take about 7 minutes to generate the solution
Intuitively The average number is 5 There are 3 numbers in each row, column, diagonal Average number (5) * # numbers/row .. (3) = 15  5 is probably in the middle (it is)  hard code 5 in the middle to speed up the code.

TOWERS OF HANOI 3 Towers: left, center, right N disks on left tower
All disks have a different diameter A smaller disk must be on top of a bigger disk; it can be alone too We want to move the N disks to the center tower

TOWERS OF HANOI Starting position with 3 disks

TOWERS OF HANOI Solution (general case: N >= 2):
To move N disks from A to B using C Move (N-1) disks from A to C using B (recursive call) Move 1 disk from A to B Move (N-1) disks from C to B using A (recursive call) Base Case (only 1 disk to move from A to B; no need for C here):

TOWERS OF HANOI Problem: Can we move N disks from tower A to tower B using tower C? Yes or No answer + printing out all the steps Predicate move takes 4 arguments: the number of disks, and 3 towers

TOWERS OF HANOI Base case: Move 1 disk from A to B move(1,A,B,_) :-
write(‘Move top disk from ‘), write(A), write(‘ to ‘), write(B), nl.

TOWERS OF HANOI General case: Move N disks from A to B using C
move(N,A,B,C) :- N > 1, M is N – 1, move(M,A,C,B), move(1,A,B,_), move(M,C,B,A).

Similar presentations