SHOW:
|
|
- or go back to the newest paste.
1 | - | % assume member_/2 is defined |
1 | + | |
2 | ||
3 | memb_or_call(L,{E}):-!,E. | |
4 | memb_or_call(L,E):-member(E,L). | |
5 | ||
6 | solve(Neighborhood) :- | |
7 | ||
8 | /* | |
9 | the solution consists of five compounds | |
10 | each compound consists of the six traits of a house, in order | |
11 | ||
12 | position = 1, 2, 3, 4, 5 | |
13 | nationality = brit, dane, german, norwegian, swede | |
14 | colors = blue, green, red, white, yellow | |
15 | beverages = beer, coffee, milk, tea, water | |
16 | smokes = bluemaster, dunhill, pallmall, prince, blend | |
17 | keeps = cat, bird, dog, fish, horse | |
18 | */ | |
19 | ||
20 | % the neighborhood looks like this | |
21 | Neighborhood = [ | |
22 | (1,_,_,_,_,_), | |
23 | (2,_,_,_,_,_), | |
24 | (3,_,_,_,_,_), | |
25 | - | maplist(lists:member_(Neighborhood),[ |
25 | + | |
26 | (5,_,_,_,_,_)], | |
27 | ||
28 | maplist(memb_or_call(Neighborhood),[ | |
29 | % 1. The Brit lives in a red house. | |
30 | (_,brit,red,_,_,_), | |
31 | ||
32 | % 2. The Swede keeps dogs as pets. | |
33 | (_,swede,_,_,_,dog), | |
34 | ||
35 | % 3. The Dane drinks tea. | |
36 | (_,dane,_,tea,_,_), | |
37 | ||
38 | % 4. The green house is on the left of the white house (next to it). | |
39 | (A,_,green,_,_), B is A+1, | |
40 | (B,_,white,_,_), | |
41 | ||
42 | % 5. The green house owner drinks coffee. | |
43 | (_,_,green,coffee,_,_), | |
44 | ||
45 | % 6. The person who smokes Pall Mall rears birds. | |
46 | (_,_,_,_,pallmall,birds), | |
47 | ||
48 | % 7. The owner of the yellow house smokes Dunhill. | |
49 | (_,_,yellow,_,dunhill,_), | |
50 | ||
51 | % 8. The man living in the house right in the center drinks milk. | |
52 | (3,_,_,milk,_,_), | |
53 | ||
54 | % 9. The Norwegian lives in the first house. | |
55 | - | (C,_,_,_,blend,_), plus_or_minus_one(C, D), |
55 | + | |
56 | ||
57 | % 10. The man who smokes blend lives next to the one who keeps cats. | |
58 | (C,_,_,_,blend,_), {plus_or_minus_one(C, D)}, | |
59 | - | (E,_,_,_,_,horses), plus_or_minus_one(E, F), |
59 | + | |
60 | ||
61 | % 11. The man who keeps horses lives next to the man who smokes Dunhill. | |
62 | (E,_,_,_,_,horses), {plus_or_minus_one(E, F)}, | |
63 | (F,_,_,_,dunhill,_), | |
64 | ||
65 | % 12. The owner who smokes Blue Master drinks beer. | |
66 | (_,_,_,beer,bluemaster,_), | |
67 | ||
68 | % 13. The German smokes Prince. | |
69 | - | (G,norwegian,_,_,_,_), plus_or_minus_one(G, H), |
69 | + | |
70 | ||
71 | % 14. The Norwegian lives next to the blue house. | |
72 | (G,norwegian,_,_,_,_), {plus_or_minus_one(G, H)}, | |
73 | (H,_,blue,_,_,_), | |
74 | ||
75 | % 15. The man who smokes blend has a neighbor who drinks water. | |
76 | (I,_,_,_,blend,_), plus_or_minus_one(I, J), | |
77 | (J,_,_,water,_,_), | |
78 | ||
79 | % Question: Who owns the fish? | |
80 | (_,_,_,_,_,fish)]). | |
81 | ||
82 | % This is probably very very very bad practice | |
83 | plus_or_minus_one(I, J) :- Im is I-1, Ip is I+1, member(J, [Im, Ip]). | |
84 | ||
85 | main :- solve(Neighborhood), maplist(writeln, Neighborhood). |