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:
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


0