5 / 5 / 2
Регистрация: 04.10.2010
Сообщений: 205
1

Задачка про Гномов и Злого волшебника Грендальфа

30.05.2015, 22:37. Показов 898. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Подкинули логическую головоломки, которые надо решить на Prolog. Никак не могу осилить одну из них:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
На рудниках злого волшебника Грендальфа уже много лет трудятся пять гномов. По приказу чародея каждый из них ищет камни строго определённого вида. Грендальф хранит в своей канцелярии два списка узников: список имён, в котором имена гномов расположены по алфавиту, и список сроков, упорядоченный по возрастанию сроков заключения, среди которых есть 80,159,176 и 202 года.
  Известно, что:
  1. Гном с кайлом стоит в списке сроков сразу после искателя сапфиров.
  2. Брыкли в списке сроков следует сразу за гномом с турбобуром. Однако Брыкли      
      придётся работать всё же не так долго, как специалисту по изумрудам.
  3. Искателю изумрудов придётся томиться в подземелье дольше, чем Фигли, но и тот  
      трудится уже больше 80 лет.
  4. Звякли никогда не имел дела с сапфирами. В списке сроков он стоит прямо перед 
      искателем агатов.
  5. Квакли в списке сроков следует сразу за гномом с киркой и прямо перед гномом с 
      отбойным молотком, ищущим алмазы.
  6. Имя гнома, специализирующегося на алмазах, стоит в списке имён сразу после 
      имени бедняги, который заключён на 131 год.
Нужно ответить на вопросы:
1.  Кто ищет рубины?
2.  Кто работает заступом?
3.  Каков срок заточения у Дрихли?
В сети есть только одна тема, и та на форуме: Задачка про Гномов и Злого волшебника Грендальфа .Но до полноценного решения не дошли(

Выводит в конце "Press the SPACE bar". Если вручную вводить Goal, то пишет NO. Что я делаю не так?

Немного дописанный код программы:
Prolog
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
domains
tname=string
ttool=string
tsrok=integer
tston=string
tsroki=tsroki(tname, tsrok, tston, ttool)
tsrokilist=tsroki*
 
predicates
puzzle
structure(tsrokilist)
key(tsrokilist)
question(tsrokilist, tname, tsrok)
solution(tname, tsrok)
 
tgname(tsroki,tname)
tgtool(tsroki,ttool)
tgston(tsroki,tston)
tgsrok(tsroki,tsrok)
 
stateafter(tsroki, tsroki, tsrokilist)
 
member(tsroki,tsrokilist)
 
goal
puzzle.
 
clauses
puzzle:-
structure(Struct),
key(Struct),
question(Struct, Name, Srok),
solution(Name, Srok).
 
structure([
tsroki(_,80,_,_),
tsroki(_,131,_,_),
tsroki(_,159,_,_),
tsroki(_,176,_,_),
tsroki(_,202,_,_)
]).
%structure(
%[tsroki(_,_,_,_),
%tsroki(_,_,_,_),
%tsroki(_,_,_,_),
%tsroki(_,_,_,_),
%tsroki(_,_,_,_)]
%).
 
 
key(Sroki):-
% объявление камней:
%member(tsroki(_,80,_,_),Sroki),
%member(tsroki(_,131,_,_),Sroki),
%member(tsroki(_,159,_,_),Sroki),
%member(tsroki(_,176,_,_),Sroki),
%member(tsroki(_,202,_,_),Sroki),
 
% объявление камней:
%member(tsroki(_,_,"Almaz",_),Sroki),
%member(tsroki(_,_,"Rubin",_),Sroki),
%member(tsroki(_,_,"Sapfir",_),Sroki),
%member(tsroki(_,_,"Agat",_),Sroki),
%member(tsroki(_,_,"Izumrud",_),Sroki),
% объявление инструментов:
%member(tsroki(_,_,_,"Kailo"),Sroki), 
%member(tsroki(_,_,_,"Turbobur"),Sroki),
%member(tsroki(_,_,_,"Kirka"),Sroki),
%member(tsroki(_,_,_,"Molot"),Sroki),
%member(tsroki(_,_,_,"Zastup"),Sroki),
 
 
% ключ 1:
% Гном с кайлом стоит в списке сроков сразу после искателя сапфиров.
stateafter(Gn2, Gn1, Sroki),
tgtool(Gn1,"Kailo"),
tgston(Gn2,"Sapfir"),
 
% ключ 2:
% Брыкли в списке сроков следует сразу за гномом с турбобуром. однако Брыкли 
% придётся работать всё же не так долго, как специалисту по изумрудам.
stateafter(Gn4, Gn3, Sroki),
stateafter(Gn3, Gn5, Sroki),
tgname(Gn3,"Brikli"),
tgtool(Gn4,"Turbobur"),
tgston(Gn5,"Izumrud"),
 
% ключ 3:
% Искателю изумрудов придётся томиться в подземелье дольше, чем Фигли, но и тот   
% трудится уже больше 80 лет.
stateafter(Gn7, Gn6, Sroki),
stateafter(Gn8, Gn7, Sroki),
tgston(Gn6,"Izumrud"),
tgname(Gn7,"Figli"),
tgsrok(Gn8,80),
 
% ключ 4:
% Звякли никогда не имел дела с сапфирами. В списке сроков он стоит прямо перед 
% искателем агатов.
stateafter(Gn9, Gn10, Sroki),
tgname(Gn9,"Zvakli"),
not(tgston(Gn9,"Sapfir")),
tgston(Gn10,"Agat"),
% ключ 5:
% Квакли в списке сроков следует сразу за гномом с киркой и прямо перед гномом с 
% отбойным молотком, ищущим алмазы.
stateafter(Gn12, Gn11, Sroki),
stateafter(Gn11, Gn13, Sroki),
tgname(Gn11,"Kvakli"),
tgtool(Gn12,"Kirka"),
tgtool(Gn13,"Molot"),
tgston(Gn13,"Almaz"),
 
% ключ 6:
% Имя гнома, специализирующегося на алмазах, стоит в списке имён сразу после 
% имени бедняги, который заключён на 131 год.
stateafter(Gn15, Gn14, Sroki),
tgston(Gn14,"Almaz"),
tgsrok(Gn15,131).
 
question(Sroki, Name, Srok):-
%опрос 1 
member(G1,Sroki),
tgname(G1,Name),
tgston(G1,"Rubin"),
%опрос 2
member(G2,Sroki),
tgname(G2,Name),
tgtool(G2,"Zastup"),
%опрос 3
member(G3,Sroki),
tgsrok(G3,Srok),
tgname(G3,"Drihli").
solution(Name, Srok):-
write("Rubin ishet Gnom"), write(Name), nl,
write("Zastupom rabotaet Gnom"), write(Name), nl,
write("Srok y Drihli"), write(Srok).
 
stateafter(A,B,[A,B,_]).
stateafter(A,C,[A,_,C]).
stateafter(B,C,[_,B,C]). 
tgname(tsroki(A,_,_,_),A). %имя
tgsrok(tsroki(_,B,_,_),B). %срок
tgston(tsroki(_,_,C,_),C). %камни
tgtool(tsroki(_,_,_,D),D). %инструменты
 
 
member(X,[X|_]).
member(X,[_|Y]):-
member(X,Y).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2015, 22:37
Ответы с готовыми решениями:

Задачка про Гномов и Злого волшебника Грендальфа
Добрый день. Задали такую головоломку решить на Прологе: ЗАДАЧА №10. Пользуясь методом...

Задача про гномов
Помогите пожалуйста разобраться с задачей-> На скамье длиной L см расположены N гномов. В...

Тема про гномов, эльфов и орков. Ролевики и толкиенисты, кучкуемся!
Девять - струны звонкой лютни, той, что носят менестрели, что воспели в своих песнях девять...

Задачка про матрицы
Доброго времени суток! имеется такая задачка - все положительные элементы матрицы С(M,N) разделить...

0
30.05.2015, 22:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2015, 22:37
Помогаю со студенческими работами здесь

Задачка про треугольник.
Для вас эта задача очень легкая, но я не как не могу ее сделать. Пожалуйста помогите! Условие...

Задачка про экзамен
Экзамен состоит с 10 вопросов, на каждый с которых нужно дать ответ "Да" либо "нет". Какая...

Задачка про кенгуру
Здравствуйте. Нашел задачку на https://www.hackerrank.com/challenges/kangaroo/problem. Не могу...

задачка про автомобиль
Автомобиль движется со скоростью 60 км/ч. Внешний диаметр покрышек колес равен 60 см. Найти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru