Prolog - Acertijo en Prolog

 
Vista:
sin imagen de perfil
Val: 1
Ha mantenido su posición en Prolog (en relación al último mes)
Gráfica de Prolog

Acertijo en Prolog

Publicado por Luis (1 intervención) el 13/10/2019 02:47:48
Buenas, podrían ayudarme con un acertijo en Prolog. Soy nuevo con el lenguaje y no sé como resolverlo realmente. ¿Alguna idea o sugerencia?

Cinco personas visitan un bar para tomar un trago de Scotch. Curiosamente, se dió el caso de que todos pidieron tragos distintos y todos fueron servidos por diferentes camareros. A partir de las pistas siguientes, determine quién sirvió a quién, cuales fueron los tragos servidos a cada uno, y en qué orden fueron servidos.
- La persona que tomó Scotch y Cola no fue servida de segunda.

- La primera persona de la línea no fue la señorita Peña.

- A la señora Jimenez le sirvieron Scotch y Ginger, pero no fue Luis quién se lo sirvió.

- Monica le sirvió a alguien un Scotch con Cola.

- El tomador de cocktail fue servido de último.

- El señor Rodriguez fue servido por Rita.

- Ni Monica ni Alejandro le sirvieron al señor Perez quién era el tercero en la línea.

- Luis sirvió a la cuarta persona en la línea pero esa persona no ordenó Scotch y Soda.

* ¿Quién sirvió a Núñez?

* ¿Qué sirvió Patricia?

* ¿En qué orden sirvieron el Scotch con hielo?

Código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
% Resolution Engine
solve_puzzle(puzzle(Clues,Queries,Solution),Solution):-
	solve(Clues),
	solve(Queries).
solve([Clue|Clues]):-
	Clue,
	solve(Clues).
solve([]):- !.
 
% Codification of puzzle clues, queries and solution
example_puzzle(Solution):-
	structure(Structure),
	clues(Structure,Clues),
	queries(Structure,Queries,Solution),
	solve_puzzle(puzzle(Clues,Queries,Solution),Solution).
 
structure([
	client(_N1, _D1, _W1, primero),
	client(_N2, _D2, _W2, segundo),
	client(_N3, _D3, _W3, tercero),
	client(_N4, _D4, _W4, cuarto),
	client(_N5, _D5, _W5, quinto)
	]).
 
clues(Clients, [
	(order(Client2Clue1, segundo),
	 select(Client2Clue1, Clients, Clients1Clue1),
	 member(ClientClue1, Clients1Clue1),
	 drink(ClientClue1, scotch_cola)),
	(order(Client2Clue2, primero),
	 select(Client2Clue2, Clients, Clients1Clue2),
	 member(ClientClue2, Clients1Clue2),
	 name(ClientClue2, pena)),
	(waiter(Client2Clue3, luis),
	 select(Client2Clue3, Clients, Clients1Clue3),
	 member(ClientClue3, Clients1Clue3),
	 drink(ClientClue3, scotch_ginger),
	 name(ClientClue3, jimenez)),
	(waiter(ClientClue4, monica),
	 drink(ClientClue4, scotch_cola)),
	(order(ClientClue5, quinto),
	 drink(ClientClue5, cocktail)),
	(name(ClientClue6, rodriguez),
	 waiter(ClientClue6, rita)),
	(waiter(Client2Clue7, monica),
	 waiter(Client3Clue7, alejandro),
	 select(Client2Clue7, Clients, Clients1Clue7),
	 select(Client3Clue7, Clients1Clue7, Clients2Clue7),
	 member(ClientClue7, Clients2Clue7),
	 name(ClientClue7, perez),
	 order(ClientClue7, tercero)),
	(drink(Client2Clue8, scotch_soda),
	 select(Client2Clue8, Clients, Clients1Clue8),
	 member(ClientClue8, Clients1Clue8),
	 waiter(ClientClue8, luis),
	 order(ClientClue8, cuarto))
	]).
 
queries(Clients,
	[member(Q1, Clients),
	 name(Q1, nunez),
	 waiter(Q1, Waiter),
	 member(Q2, Clients),
	 waiter(Q2, patricia),
	 drink(Q2, Drink),
	 member(Q3, Clients),
	 drink(Q3, scotch_hielo),
	 order(Q3, Order)
	]
	,[Waiter, Drink, Order]
	).
 
 
name(client(N, _D, _W, _O), N).
drink(client(_N, T, _W, _O), T).
waiter(client(_N, _D, C, _O), C).
order(client(_N, _D, _W, O), O).
 
first(A, [A, _B, _W, _D, _E]).
second(B, [_A, B, _W, _D, _E]).
third(C, [_A, _B, C, _D, _E]).
fourth(D, [_A, _B, _W, D, _E]).
fifth(E, [_A, _B, _W, _D, E]).
 
 
 
main:- example_puzzle(Solution), write(Solution).
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder