Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707

головоломка "Фонари"

27.12.2010, 16:30. Показов 5205. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть головоломка Фонари, вот условие для решения.

не могу придумать, даже алгоритм для решения, подскажите, пожалуйста...
в принципе можно, исключить ситуацию с пустыми черными клетками и с черными клетками, в которых стоит 0, чтобы проще было...
Миниатюры
головоломка "Фонари"  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2010, 16:30
Ответы с готовыми решениями:

Головоломка на прологе
Помогите решить головоломку на прологе. Очень нужно!

Головоломка на SWI
Здравствуйте! Мое задание такое: "За столиком в кафе познакомились три девушки: Алёна, Светлана и Марианна. Одна из них работает...

задача-головоломка
нужна помощь в написании программы условие задачи: имеется n городов, некоторые из них соединены дорогами известной длины. Вся система...

49
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
29.12.2010, 23:51  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Грымзик Посмотреть сообщение
Нет бага, это просто когда я отлаживала, я выводила промежуточные расположения фонарей, т.е просто сотрите write на 43 строке.
ок, спасибо большое!)

а можете еще сказать что делает предикат est_neosveshennaya_kletka(Fonari,Kletki) и вот этот кусок:
Prolog
1
2
for(A,A,_).
for(I,A,B):-A<B,A1=A+1,for(I,A1,B).
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
30.12.2010, 00:07
Предикат проверяет если ли на поле хоть одна пустая неосвещенная клетка. Предикат for аналог стандартному for, например из Си. Первый параметр принимает все значение в промежутке от второго параметра, до третьего параметра.
for(A,A,_). очевидно, что начала промежутка в промежуток входит
for(I,A,B):-A<B,A1=A+1,for(I,A1,B). если начало промежутка еще не достигло конца промежутка, то если I входит в промежуток [A+1,B], то оно входит и в промежуток [A,B].
1
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
30.12.2010, 00:22  [ТС]
Грымзик, ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ!!! =)

Добавлено через 12 минут
ой, еще один вопрос...
а вот мы учитываем если у нас есть пустая клетка?
или мы для нее задаем значение -1?
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
30.12.2010, 00:27
Мы ее обозначаем как -1, а не даем такое значение. И все учитываем. Это реализуется в строчке for(Znachenie,0,4), т.е предполагаем что там стоит значение из промежутка [0,4]
0
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
30.12.2010, 00:28  [ТС]
казус произошел, для такого варианта черных клеток не работает(поле 5x5):
Prolog
1
[f(1,5,1),f(2,2,4),f(2,4,3),f(5,2,0),f(5,5,2),f(3,5,3),f(4,4,3)]
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
DOMAINS
f1=f*
l1=l*
f=f(i,j,znachenie)
l=l(i,j)
i=integer
j=integer
znachenie=integer
 
 
PREDICATES
obstanovka(f1,f1,l1)
member(l,l1)
member(f,f1)
addfon(f,f1,l1,l1)
ryadom(l,f)
fonar_nahoditsya_ryadom(f,l1,l)
rasstavit(f,f1,integer,l1,l1)
length(l1,integer)
proverka(l,l1,f1)
black_gor(i,j,j,f1)
black_ver(j,i,i,f1)
for(i,i,i)
for(j,j,j)
for(znachenie,integer,integer)
proverka_na_neos(l,l1,f1)
est_neosveshennaya_kletka(l1,f1)
 
CLAUSES
for(A,A,_).
for(I,A,B):-A<B,A1=A+1,for(I,A1,B).
 
member(A,[A|_]).
member(A,[_|P]):-member(A,P).
 
 
obstanovka([f(I,J,-1)|P],PrevFields,Fonari):-!,for(Znachenie,0,4),
       addfon(f(I,J,Znachenie),PrevFields,Fonari,NewFonari),
       obstanovka(P,[f(I,J,Znachenie)|PrevFields],NewFonari).
 
obstanovka([f(I,J,Znachenie)|P],PrevFields,Fonari):-
        addfon(f(I,J,Znachenie),PrevFields,Fonari,NewFonari),
        obstanovka(P,[f(I,J,Znachenie)|PrevFields],NewFonari).
 
obstanovka([],Fields,Fonari):-not(est_neosveshennaya_kletka(Fonari,Fields)),write(Fonari).
 
ryadom(l(I,J),f(I,J1,_)):-J=J1-1,J>0;J=J1+1,J<=5.
ryadom(l(I,J),f(I1,J,_)):-I=I1-1,I>0;I=I1+1,I<=5.
 
fonar_nahoditsya_ryadom(f(I,J,Z),Fonari,Fonar):-member(Fonar,Fonari),
ryadom(Fonar,f(I,J,Z)).
 
length([],0).
length([_|Tail],L):-length(Tail,L1),L=L1+1.
 
addfon(f(_,_,0),_,Fonari,Fonari):-!.
addfon(f(I,J,K),PrevFields,Fonari,NewFonari):-
findall(Fonar,fonar_nahoditsya_ryadom(f(I,J,_),Fonari,Fonar),FonariRyadom),
length(FonariRyadom,N),
M=K-N,rasstavit(f(I,J,_),PrevFields,M,Fonari,NewFonari).
        
rasstavit(_,_,M,_,_):-M<0,!,fail.
rasstavit(_,_,0,Fonari,Fonari):-!.
rasstavit(f(I,J,Z),PrevFields,M,Fonari,NewFonari):-ryadom(l(I1,J1),f(I,J,Z)),
not(member(l(I1,J1),Fonari)),
not(member(f(I1,J1,Z),PrevFields)),not(proverka(l(I1,J1),Fonari,PrevFields)),M1=M-1,
rasstavit(f(I,J,Z),PrevFields,M1,[l(I1,J1)|Fonari],NewFonari).
 
black_gor(I,A,B,Fields):-member(f(I,J,_),Fields),J>A,J<B.
black_gor(I,A,B,Fields):-member(f(I,J,_),Fields),J<A,J>B.
 
black_ver(J,A,B,Fields):-member(f(I,J,_),Fields),I>A,I<B.
black_ver(J,A,B,Fields):-member(f(I,J,_),Fields),I<A,I>B.
 
proverka(l(I,J),Fonari,Kletki):-member(l(I,J1),Fonari),not(black_gor(I,J,J1,Kletki)).
proverka(l(I,J),Fonari,Kletki):-member(l(I1,J),Fonari),not(black_ver(J,I,I1,Kletki)).
 
proverka_na_neos(l(X,Y),Fonari,Kletki):-not(member(l(X,Y),Fonari)),
not(member(f(X,Y,_),Kletki)),not(proverka(l(X,Y),Fonari,Kletki)).
 
est_neosveshennaya_kletka(Fonari,Kletki):-
        for(I,1,5),for(J,1,5),proverka_na_neos(l(I,J),Fonari,Kletki).
 
GOAL
obstanovka([f(1,5,1),f(2,2,4),f(2,4,3),f(5,2,0),f(5,5,2),f(3,5,3),f(4,4,3)],[],[]).
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
30.12.2010, 00:34
Ну правильно, при данной расстановке нет решений, не надо забывать, что фонари не должны светить друг на друга.
0
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
30.12.2010, 01:04  [ТС]
Цитата Сообщение от Грымзик Посмотреть сообщение
Ну правильно, при данной расстановке нет решений, не надо забывать, что фонари не должны светить друг на друга.
а можете подсказать расстановку для поля 5x5, чтобы было решение?)

Добавлено через 23 минуты
для вот расстановки не хочет выводить, хотя все правильно, вроде...
Prolog
1
f(2,1,3),f(3,2,-1),f(1,4,1),f(3,5,1),f(5,2,2),f(5,5,0)
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
30.12.2010, 01:08
Нет, этот пример тоже невозможен, но правда прога и не работает на примере [f(1,1,1)], странно...
0
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
30.12.2010, 01:19  [ТС]
Цитата Сообщение от Грымзик Посмотреть сообщение
Нет, этот пример тоже невозможен, но правда прога и не работает на примере [f(1,1,1)], странно...
она работает для поля 4x4 если сделать f(1,1,1),f(1,2,1),f(4,3,1),f(4,4,1), ну или если вместо 1 поставить -1, то тоже работает, другие расстановки делать, то не работает =(

Добавлено через 8 минут
Цитата Сообщение от Грымзик Посмотреть сообщение
Нет, этот пример тоже невозможен, но правда прога и не работает на примере [f(1,1,1)], странно...
не знаете в чем дело? =(
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
30.12.2010, 01:36
Что-то я похоже тоже уже засыпаю. Конечно [f(1,1,1)] работать не будет. Ведь фонари можно только рядом с черными клетками ставить, а не где угодно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.12.2010, 01:36

Логическая головоломка в Visual Prolog 5.2
Помогите пожалуйста написать программу, которая решает задачу в Visual Prolog 5.2: Билл, Джон и Ричард играют в одном оркестре. Они...

Комбинаторна головоломка на Swi Prolog
Помогите с заданием. Нужно написать программу которая методом &quot;образовать и проверить&quot; даст ответы на вопросы следующей головоломки:...

Головоломка про инструменты и языки
Маша, Лида, Женя и Катя играют на разных инструментах – виолончели, рояли, гитаре, скрипке, но каждая только на одном. Они же владеют...

логическая головоломка про прыжки в высоту
Написать программу на языке Prolog, реализующую логическую головоломку. Три девушки упражнялись, прыгая в высоту перед зачетом по...

Головоломка про аптекаря, бухгалтера и агронома.
http://puzzle-ru.blogspot.ru/2009/02/blog-post_18.html


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

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru